ASP.NET MVC架構(gòu)中依賴性注入的概念
Java平臺的Struct和Spring框架都能夠有效地組織J2EE應(yīng)用各層的對象。不管是控制層的Action對象,還是業(yè)務(wù)層的Service對象,還是持久層的DAO對象,都可在Spring/Struct的管理下有機(jī)地協(xié)調(diào)、運(yùn)行。Spring/Struct將各層的對象以松耦合的方式組織在一起,Action對象無須關(guān)心Service對象的具體實(shí)現(xiàn),Service對象無須關(guān)心持久層對象的具體實(shí)現(xiàn),各層對象的調(diào)用完全面向接口。當(dāng)系統(tǒng)需要重構(gòu)時(shí),代碼的改寫量將大大減少。這樣就有了ASP.NET MVC架構(gòu)中依賴性注入的概念。
其實(shí),依賴性注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)二者是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在傳統(tǒng)的程序設(shè)計(jì)過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例。但在Spring/Struct里,創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此稱為“控制反轉(zhuǎn)”;創(chuàng)建被調(diào)用者 實(shí)例的工作通常由Spring/Struct容器來完成,然后注入調(diào)用者,因此也稱為“依賴性注入”。
具有諷刺意味的是,如今的asp.net mvc框架中也逐漸引入了以上概念。其實(shí),此框架本身的創(chuàng)建就借鑒了以上著名JAVA平臺二框架的構(gòu)建機(jī)理(這也恰恰反映了微軟在許多方面的風(fēng)格--“為我所用”)。因此,要想全面深入地掌握asp.net平臺的這個(gè)新的mvc框架,對于依賴性注入(或控制反轉(zhuǎn))這樣的基礎(chǔ)性概念非要掌握透徹不可;否則,只能算一知半解。
【編輯推薦】