Rumah >pembangunan bahagian belakang >tutorial php >PHP依赖倒置(Dependency Injection)代码实例,依赖倒置原则_PHP教程
实现类:
实现实例:
依赖注入和控制反转是同义词,已合并。控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。
起源
早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论,他为创造了控制反转一个更好的名字:依赖注入。许多非凡的应用(比HelloWorld.java更加优美,更加复杂)都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象都需要,与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么如你所见,这将导致代码高度耦合并且难以测试。 IoC 亦称为 “依赖倒置原理”("Dependency Inversion Principle")。差不多所有框架都使用了“倒置注入(Fowler 2004)技巧,这可说是IoC原理的一项应用。SmallTalk,C++, Java 或各种.NET 语言等面向对象程序语言的程序员已使用了这些原理。 控制反转是Spring框架的核心。 应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
编辑本段IoC是设计模式
IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式。 Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了,如: Class A { AInterface a; A() { } aMethod() { a = new AInterfaceImp(); } } ClassA与AInterfaceImp就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现,即: InterfaceImplFactory { AInterface create(Object condition) { if(condition = condA) { return new AInterfaceImpA(); } elseif(condition = condB) { return new AInterfaceImpB(); } else { return new AInterfaceImp(); } } } 表面上是在一定程度上缓解了以上问题,但实质上这种代码耦合并没有改变。通过IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML 文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了。 IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和......余下全文>>
国内 cnblog 51cto csdn
国外
www.asp.net
www.codeproject.com
www.codeplex.com
至于开源项目,51aspx哪能轮得到
大名鼎鼎的Nunit, Json.net, log4net, lucene.net, paint.net, mono多了去了,看看下面的列表
1.[TEST] xUnit.net - 用于TDD的最好的测试框架之一。
2.[TEST] RhinoMocks mocking framework - 通过创建mock使测试更简单。
3.[TEST] White for automation of Windows applications - 用代码驱动Windows程序来测试。
4.[TEST] Gallio Automation Platform - 可以运行很多测试框架,如MSTest、xUnit、NUnit以及MbUnit。
5.[DATA] Fluent NHibernate - Fluent NHibernate让你可以用C#代码来设置映射关系。
6.[OOP] StructureMap Dependency Injection/Inversion of Control - 解耦类和依赖。
7.[OOP] Managed Extensibility Framework - 从静态编译程序转换到动态语言程序
8.[APPFX] s#arp architecture for web applications - 用ASP.NET MVC和NHibernate快速开发web应用程序。
9.[APPFX] OpenRasta REST based framework for building web applications - 让你的程序拥有一个REST API接口。
10.[APPFX] CSLA.NET Application Framework - .NET开发综合框架
11.[APPFX] Spring.NET Application Framework - Web开发综合框架
12.[RUNTIME] Mono enables .NET on Linux and Mac - 在Linux、BSD和OS X上使用.NET.
13.[UTIL] Sandcastle Help File Builder - 创建MSDN样式的文档。
14.[HELPER] EasyHook for Windows API Hooking - 用托管代码扩展非托管代码。
15.[HELPER] Json.NET for working with JSON formatted data - 用一条语句序列化.NET对象。
16.[HELPER] Excel Data Reader for Excel 97 to 2007 - ......余下全文>>