摘要:的目的也是解耦,并且非常適合基于服務和組件的應用。一個類可以在運行時,有針對性地增減替換所要用到的服務,從而得到一定程度的優化。這兩個數組均是以服務或組件的為鍵的數組。用于保存這些組件或服務的定義。這個定義可以是配置數組對象類名參考
SL的目的也是解耦,并且非常適合基于服務和組件的應用。
Service Locator充當了一個運行時的鏈接器的角色,可以在運行時動態地修改一個類所要選用的服務, 而不必對類作任何的修改。
一個類可以在運行時,有針對性地增減、替換所要用到的服務,從而得到一定程度的優化。
實現服務提供方、服務使用方完全的解耦,便于獨立測試和代碼跨框架復用。
基本功能Yii中的SL由yiidiServiceLocator實現
class ServiceLocator extends Component{ // 用于緩存服務、組件等的實例 private $_components = []; // 保存服務和組件的定義,通常為配置數組,可以用來創建具體的實例 private $_definitions = []; // 重載了getter, 使得訪問服務和組件與訪問類的屬性一樣。 // 保留了原來Component的getter所具有的功能 public function __get($name){} // 增加了對是否具有某個服務和組件的判斷。 public function __isset($name){} public function has($id, $checkInstance = false){ return $checkInstance ? isset($this->components[$id]) : isset($this->_definitions[$id]); } public function get($id, $throwException = true){} public function set($id, $definition){} // 刪除一個服務或組件 public function clear($id){ unset($this->_definitions[$id], $this->_components[$id]); } public function getComponents($returnDefinitions = true){} // 批量注冊 public function setComponents($components) }數據結構
SL維護了兩個數組: $_components & $_definitions。這兩個數組均是以服務或組件的ID為鍵的數組。
SL提供了注冊服務和組件的方法。
$_components用于緩存SL中的組件或服務的實例,為可讀寫的屬性。
$_definitions用于保存這些組件或服務的定義。這個定義可以是:
配置數組
PHP callable
對象
類名: is_callable($definition, true) == true
參考
http://www.digpage.com/service_locator.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21465.html
摘要:在中使用解耦,有兩種注入方式構造函數注入屬性注入。對象的實例化解析依賴信息該方法實質上就是通過的反射機制,通過類的構造函數的參數分析他所依賴的單元。 有關概念 依賴倒置原則(Dependence Inversion Principle, DIP) 傳統軟件設計中,上層代碼依賴于下層代碼,當下層出現變動時,上層也要相應變化。 DIP的核心思想是:上層定義接口,下層實現這個接口,從而使的下...
摘要:官網源碼解讀號外號外歡迎大家我們開發組定了一個就線下聚一次的小目標里面的框架算是非常重的了這里的重先不具體到性能層面主要是框架的設計思想和框架集成的服務讓框架可以既可以快速解決很多問題又可以輕松擴展中的框架有在應該無出其右了這次解讀的源碼 官網: https://www.swoft.org/源碼解讀: http://naotu.baidu.com/file/8... 號外號外, 歡迎大...
摘要:構造器注入實現特定參數的構造函數,在新建對象時傳入所依賴類型的對象。 基本概念 1.依賴倒置(反轉)原則(DIP):一種軟件架構設計的原則(抽象概念,是一種思想)在面向對象編程領域中,依賴反轉原則(Dependency inversion principle,DIP)是指一種特定的解耦(傳統的依賴關系創建在高層次上,而具體的策略設置則應用在低層次的模塊上)形式,使得高層次的模塊不依賴于...
摘要:環境需要了解一下一個純粹的與本地環境密切相關的配置項。對于配置項以數組進行組織。數組元素表示將要創建的對象的完整類名。數組元素表示指定為屬性的初始值為。數組元素表示將綁定到對象的事件中。對于形式配置項,視配置值為一個事件,綁定到上。 環境 需要了解一下cookieValidationKey:一個純粹的、與本地環境密切相關的配置項。 但是,在有些情況下,cookieValidationK...
摘要:事件的綁定和解除對事件進行綁定和解綁。使用全局函數作為來進行綁定使用對象的成員函數來進行綁定使用類的靜態成員函數進行綁定使用匿名函數上面的數組是用來維護事件數組。事件的級別類級別事件類級別事件用于響應所有類實例的事件。 Yii基礎 事件 event 使用事件,可以在特定的時點,觸發執行預先設定的一段代碼,事件既是代碼解耦的一種方式,也是設計業務流程的一種模式。 事件的相關要素 這是一...
閱讀 1264·2021-09-23 11:51
閱讀 1370·2021-09-04 16:45
閱讀 626·2019-08-30 15:54
閱讀 2076·2019-08-30 15:52
閱讀 1594·2019-08-30 11:17
閱讀 3098·2019-08-29 13:59
閱讀 2010·2019-08-28 18:09
閱讀 381·2019-08-26 12:15