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