控制反轉是物件導向程式設計中的一種設計原則,可以用來減少電腦程式碼之間的耦合度,還可以透過控制反轉,讓物件在被創建的時候,由一個調控系統內所有物件的外界實體將其所依賴的物件的參考傳遞給它。
控制反轉(Inversion of Control,縮寫為IoC),是物件導向程式設計中的一種設計原則,可以用來減少電腦程式碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫做「依賴查找」(Dependency Lookup)。透過控制反轉,物件在被創建的時候,由一個調控系統內所有物件的外界實體將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。
控制反轉實作策略
IoC是一個很大的概念,可以用不同的方式實作。其主要形式有兩種:
依賴查找:容器提供回調介面和上下文條件給元件。 EJB和Apache Avalon 都使用這種方式。這樣一來,元件就必須使用容器提供的API來尋找資源和協作對象,僅有的控制反轉只體現在那些回呼方法上(也就是上面所說的類型1):容器將呼叫這些回呼方法,從而讓應用程式碼獲得相關資源。
依賴注入:元件不做定位查詢,只提供普通的Java方法讓容器去決定依賴關係。容器全權負責的元件的組裝,它會把符合依賴關係的物件經由JavaBean屬性或建構函式傳遞給需要的物件。透過JavaBean屬性注射依賴關係的做法稱為設值方法注入(Setter Injection);將依賴關係作為建構子參數傳入的做法稱為建構器注入(Constructor Injection)
##控制反轉實作方法
實作資料存取層資料存取層有兩個目標。第一是將資料庫引擎從應用程式中抽象化出來,這樣就可以隨時改變資料庫—比方說,從微軟SQL變成Oracle。不過在實務上很少會這麼做,也沒有足夠的理由和能力去透過使用實現資料存取層而對現有的應用進行重構。 第二個目標是將資料模型從資料庫實作中抽象化。這使得資料庫或程式碼開源根據需要改變,同時只會影響主應用的一小部分——資料存取層。這個目標是值得的,為了在現有系統中實現它進行必要的重構。 模組與介面重構依賴注入背後的一個核心思想是單一功能原則(single responsibility principle)。此原則指出,每個物件應該有一個特定的目的,而應用需要利用此目的的不同部分應使用適當的物件。這意味著這些物件在系統的任何地方都可以重複使用。但在現有系統裡面很多時候都不是這樣的。 隨時增加單元測試把功能封裝到整個物件裡面會導致自動測試困難或不可能。將模組和介面與特定物件隔離,以這種方式重構可以執行更先進的單元測試。按照後面再增加測試的想法繼續重構模組是誘惑力的,但這是錯誤的。 使用服務定位器而不是建構注入實現控制反轉不只一種方法。最常見的辦法是使用建構注入,這需要在物件首次被創建時提供所有的軟體依賴。然而,構造注入要假設整個系統都使用這個模式,這意味著整個系統必須同時進行重構。這很困難、有風險,且耗時。 推薦教學:《PHP》
以上是控制反轉是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!