依赖注入其实没有那么复杂,用简单的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联系了起来。 主程序在这里就是相当于依赖注入
依赖倒置原则,它基本上可以换一个名词叫做“分层次设计原则”,就是说你的大系统应该分出层次。一旦分层了,如果过了一段时间你突然“脑袋短路”了、硬要让底层依赖于上层,这时候怎么办? 这时候需要使用“依赖倒置”的编码模式。
控制反转(也就是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,实现了部分设计模式中的“创建”类别模式的功能,然后一般都具备模块化的概念,但是其它模式不是它能直接实现的。 多说一句,设计模式看多了容易滥用。多看多写代码,在实际的代码中理解别人的理念,完善自己的方法才是正道。
[quote=引用 2 楼 rtdb 的回复:] 在敏捷软件开发里 控制反转简单理解就是面向接口编程。 敏捷软件开发认为大多数设计模式是过度设计的,是没必要的 这本书超好: 《敏捷软件开发,原则,模式和实践》
控制反转
在敏捷软件开发里 控制反转简单理解就是面向接口编程。 敏捷软件开发认为大多数设计模式是过度设计的,是没必要的 这本书超好: 《敏捷软件开发,原则,模式和实践》
62,053
社区成员
669,051
社区内容
加载中
.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。
希望和大家一起共同营造一个活跃、友好的社区氛围。
试试用AI创作助手写篇文章吧