求科普控制反转在.net中实现过程! 控制反转,mvc,开发模式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我以前工作的公司,做.net网站的,我在那里做的工作就是用同一个后台,支持不同的前台代码,model包里写的是实体类,还有dal包和bll包,包括一个DBulity包还有一个ui的包,我不知道我用的这个后台是不是有控制反转的概念? 你想的太复杂了。你们的系统,简单说,就先分前台和后台,先根据需求定义接口(例如一个WEB SERVICE)。然后前台调用接口完成UI需求,后台实现接口提供数据。前台完全不关心后台的什么dal包和bll包。后台只要能实现接口需要的功能就行,一开始根本不需要分层分包什么的。实在需要分层分包了,还是一样,定义接口先敏捷开发的自动测试和迭代开发,可以让你随时修改代码以适应变化,只要用最简单的方式完成当前的需要就好,跟本不需要预先做复杂的设计以适应未来的需求。 其实它是很简单、很基础的想法:http://bbs.csdn.net/topics/390817672 控制反转(也就是IoC)最简单的理解就是所谓好莱坞原则:"Don't call us, we'll call you"。广义上说,回调、事件、调度器、工厂模式、策略模式等等都属于IoC的实现方式。(IoC维基百科)不过狭义上,说IoC一般都特指IoC/DI,也就是控制反转/依赖注入。DI这个概念是Martin Fowler在2004年提出的(原文),就是把对象之间的依赖关系由IoC容器统一管理,在对象的创建过程之中或者之后,负责将其依赖一并解析创建,并注入对象。(DI维基百科).NET上常用IoC/DI框架有Ninject、Unity、Autofac、StructureMap、Spring.Net上面也就是简单说一下,具体的东西可以自己搜索。至于你听到的“控制反转减少了耦合性,说什么不用mvc不用什么模式模式”。前半句没错,IoC是降低了耦合,但是后半句是胡说。首先mvc是应用模式/框架,和IoC这种更基础的模式/框架就没有互相替代的可能,而是ASP.NET MVC框架支持做IoC/DI(一个官方使用Unity做mvc的DI的例子)。至于设计模式,IoC/DI框架可以说是一个万能factory,实现了部分设计模式中的“创建”类别模式的功能,然后一般都具备模块化的概念,但是其它模式不是它能直接实现的。多说一句,设计模式看多了容易滥用。多看多写代码,在实际的代码中理解别人的理念,完善自己的方法才是正道。 依赖注入其实没有那么复杂,用简单的3行代码就可以展示:原先的代码void Main(){ foo();}void foo(){ bar();}void bar(){ ...}很明显,foo依赖bar要让foo和bar解耦可以这样:void Main(){ foo(new Action(bar));}void foo(Action action){ action();}void bar(){ ...}现在foo调用的是一个委托(action),而不是真实的bar而主程序通过将bar作为参数传给了foo,让action=bar,才让foo和bar联系了起来。主程序在这里就是相当于依赖注入 Onclientclick和OnClick执行顺序问题 在线等 高手帮帮忙 求sql语句 [求助]关于gridview中dropdownlist的问题 asp.net中我在cs文件中设置textbox1.text的值后,是不是输入就无效了啊? 正则表达式问题, Session为空时报错,偶是新手,高手进来看下 急.急.,继承DataGrid的自定义控件把他拖到页面时老是提示:活动架构不支持元素.... 大牛帮忙分析下开发《开发软件》的思路 关于session的问题 关于datagrid中的几个问题(给50分) asp.net 获取 手机设备号 散分 发布我整理的ORM开发框架CRL
你们的系统,简单说,就先分前台和后台,先根据需求定义接口(例如一个WEB SERVICE)。
然后前台调用接口完成UI需求,后台实现接口提供数据。
前台完全不关心后台的什么dal包和bll包。
后台只要能实现接口需要的功能就行,一开始根本不需要分层分包什么的。
实在需要分层分包了,还是一样,定义接口先敏捷开发的自动测试和迭代开发,可以让你随时修改代码以适应变化,
只要用最简单的方式完成当前的需要就好,
跟本不需要预先做复杂的设计以适应未来的需求。
原先的代码
void Main()
{
foo();
}
void foo()
{
bar();
}
void bar()
{
...
}
很明显,foo依赖bar
要让foo和bar解耦可以这样:
void Main()
{
foo(new Action(bar));
}
void foo(Action action)
{
action();
}
void bar()
{
...
}
现在foo调用的是一个委托(action),而不是真实的bar
而主程序通过将bar作为参数传给了foo,让action=bar,才让foo和bar联系了起来。
主程序在这里就是相当于依赖注入