實(shí)現(xiàn)類:
實(shí)現(xiàn)實(shí)例:
依賴注入和控制反轉(zhuǎn)是同義詞,已合并??刂品崔D(zhuǎn)(Inversion of Control,英文縮寫為IoC)是一個(gè)重要的面向?qū)ο缶幊痰姆▌t來削減計(jì)算機(jī)程序的耦合問題。 控制反轉(zhuǎn)還有一個(gè)名字叫做依賴注入(Dependency Injection)。簡稱DI。
起源
早在2004年,Martin Fowler就提出了“哪些方面的控制被反轉(zhuǎn)了?”這個(gè)問題。他總結(jié)出是依賴對(duì)象的獲得被反轉(zhuǎn)了。基于這個(gè)結(jié)論,他為創(chuàng)造了控制反轉(zhuǎn)一個(gè)更好的名字:依賴注入。許多非凡的應(yīng)用(比HelloWorld.java更加優(yōu)美,更加復(fù)雜)都是由兩個(gè)或是更多的類通過彼此的合作來實(shí)現(xiàn)業(yè)務(wù)邏輯,這使得每個(gè)對(duì)象都需要,與其合作的對(duì)象(也就是它所依賴的對(duì)象)的引用。如果這個(gè)獲取過程要靠自身實(shí)現(xiàn),那么如你所見,這將導(dǎo)致代碼高度耦合并且難以測試。 IoC 亦稱為 “依賴倒置原理”("Dependency Inversion Principle")。差不多所有框架都使用了“倒置注入(Fowler 2004)技巧,這可說是IoC原理的一項(xiàng)應(yīng)用。SmallTalk,C++, Java 或各種.NET 語言等面向?qū)ο蟪绦蛘Z言的程序員已使用了這些原理。 控制反轉(zhuǎn)是Spring框架的核心。 應(yīng)用控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用,傳遞給它。也可以說,依賴被注入到對(duì)象中。所以,控制反轉(zhuǎn)是,關(guān)于一個(gè)對(duì)象如何獲取他所依賴的對(duì)象的引用,這個(gè)責(zé)任的反轉(zhuǎn)。
編輯本段IoC是設(shè)計(jì)模式
IoC就是IoC,不是什么技術(shù),與GoF一樣,是一種設(shè)計(jì)模式。 Interface Driven Design接口驅(qū)動(dòng),接口驅(qū)動(dòng)有很多好處,可以提供不同靈活的子類實(shí)現(xiàn),增加代碼穩(wěn)定和健壯性等等,但是接口一定是需要實(shí)現(xiàn)的,也就是如下語句遲早要執(zhí)行:AInterface a = new AInterfaceImp(); 這樣一來,耦合關(guān)系就產(chǎn)生了,如: Class A { AInterface a; A() { } aMethod() { a = new AInterfaceImp(); } } ClassA與AInterfaceImp就是依賴關(guān)系,如果想使用AInterface的另外一個(gè)實(shí)現(xiàn)就需要更改代碼了。當(dāng)然我們可以建立一個(gè)Factory來根據(jù)條件生成想要的AInterface的具體實(shí)現(xiàn),即: InterfaceImplFactory { AInterface create(Object condition) { if(condition = condA) { return new AInterfaceImpA(); } elseif(condition = condB) { return new AInterfaceImpB(); } else { return new AInterfaceImp(); } } } 表面上是在一定程度上緩解了以上問題,但實(shí)質(zhì)上這種代碼耦合并沒有改變。通過IoC模式可以徹底解決這種耦合,它把耦合從代碼中移出去,放到統(tǒng)一的XML 文件中,通過一個(gè)容器在需要的時(shí)候把這個(gè)依賴關(guān)系形成,即把需要的接口實(shí)現(xiàn)注入到需要它的類中,這可能就是“依賴注入”說法的來源了。 IOC模式,系統(tǒng)中通過引入實(shí)現(xiàn)了IOC模式的IOC容器,即可由IOC容器來管理對(duì)象的生命周期、依賴關(guān)系等,從而使得應(yīng)用程序的配置和......余下全文>>
?
國內(nèi) cnblog 51cto csdn
國外
www.asp.net
www.codeproject.com
www.codeplex.com
至于開源項(xiàng)目,51aspx哪能輪得到
大名鼎鼎的Nunit, Json.net, log4net, lucene.net, paint.net, mono多了去了,看看下面的列表
1.[TEST] xUnit.net - 用于TDD的最好的測試框架之一。
2.[TEST] RhinoMocks mocking framework - 通過創(chuàng)建mock使測試更簡單。
3.[TEST] White for automation of Windows applications - 用代碼驅(qū)動(dòng)Windows程序來測試。
4.[TEST] Gallio Automation Platform - 可以運(yùn)行很多測試框架,如MSTest、xUnit、NUnit以及MbUnit。
5.[DATA] Fluent NHibernate - Fluent NHibernate讓你可以用C#代碼來設(shè)置映射關(guān)系。
6.[OOP] StructureMap Dependency Injection/Inversion of Control - 解耦類和依賴。
7.[OOP] Managed Extensibility Framework - 從靜態(tài)編譯程序轉(zhuǎn)換到動(dòng)態(tài)語言程序
8.[APPFX] s#arp architecture for web applications - 用ASP.NET MVC和NHibernate快速開發(fā)web應(yīng)用程序。
9.[APPFX] OpenRasta REST based framework for building web applications - 讓你的程序擁有一個(gè)REST API接口。
10.[APPFX] CSLA.NET Application Framework - .NET開發(fā)綜合框架
11.[APPFX] Spring.NET Application Framework - Web開發(fā)綜合框架
12.[RUNTIME] Mono enables .NET on Linux and Mac - 在Linux、BSD和OS X上使用.NET.
13.[UTIL] Sandcastle Help File Builder - 創(chuàng)建MSDN樣式的文檔。
14.[HELPER] EasyHook for Windows API Hooking - 用托管代碼擴(kuò)展非托管代碼。
15.[HELPER] Json.NET for working with JSON formatted data - 用一條語句序列化.NET對(duì)象。
16.[HELPER] Excel Data Reader for Excel 97 to 2007 - ......余下全文>>
?
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)