在laravel中,契約指的是框架提供的一系列定義核心服務的接口,用于方便第三方接口開發人員的開發,所有契約的實現組成了框架所有的核心任務,并且可以通過契約了解指定功能的作用。
本文操作環境:Windows10系統、Laravel6版、Dell G3電腦。
laravel契約的用法是什么
契約是什么
Laravel中的契約是指框架提供的一系列定義核心服務的接口,比如緩存,隊列,日志的接口,契約就是接口
為什么要定義接口
定義接口目的為了解耦
當我們依賴注入緩存實例的時候laravel實現如下:
例如:我們選擇使用memcached 緩存驅動
use?IlluminateContractsCacheRepository?as?Cache; class?Repository{ ????/** ?????*?創建一個新的Repository實例 ?????* ?????*?@param??Cache??$cache ?????*?@return?void ?????*/ ????public?function?__construct(Cache?$cache) ????{ ????????$this->cache?=?$cache; ????} }
不定義接口
如果不定義接口我們必須這樣寫
use?Memcached; class?Repository{ ????/** ?????*?創建一個新的Repository實例 ?????* ?????*?@param??Cache??$cache ?????*?@return?void ?????*/ ????public?function?__construct(Memcached?$cache) ????{ ????????$this->cache?=?$cache; ????} }
這樣當我們需要切換緩存驅動為redis 的時候,我們必須去控制器中把依賴注入的類型約定修改成redis,因為redis 的實現,和Memcached 并不一定完全相同,這就說明Memcached緩存緊密耦合與laravel?
什么才算是松耦合
什么才算松耦合,當系統升級,需要對一種實現進行修改(如從Memcached 需要升級到Redis)時,能夠不對代碼庫進行修改,只需要對配置進行修改就能完成升級的時候就算是松耦合了!
一個契約兩種,或者多種實現
個人感覺,契約既然定了,那么對應的實現應該是兩種,或者更多的實現,或者在不久的將來會有兩個或者更多的實現,契約就是來規定這么多實現的。如果肯定只有一種實現,感覺契約就沒啥用了!
總結
定義契約,是為了一組功能實現的一個約定,方便第三方接口開發人員的開發
契約更像一個框架的一個目錄索引,所有契約的實現組成了框架所有的核心服務,并且可以通過契約快速了解這一組功能是干什么的
對于緩存類來說,緩存的契約,就是為了規定各種緩存實現(Memcached,Redis,文件緩存)需要實現的功能
【相關推薦:laravel視頻教程】