laravel的「門面」和「契約」的問題:問題有兩個:1、這兩個東西的使用場景是什麼? 2、我理解不了為什麼要使用這兩個詞,感覺八竿子打不著,這兩個詞跟它們的功能有什麼關聯嗎?
簡單的說:外觀(你說的門面)是外觀模式的實作。 外观(你说的门面)是外观模式的实现。协议(你说的契约)是工厂方法模式或抽象工厂模式協定(你說的契約)是工廠方法模式或抽象工廠模式的實作。
外觀
門面
外觀模式
外观
门面
外观模式
协议
契约
工厂方法模式
抽象工厂模式
協定
契約
工廠方法模式
抽象工廠模式
閱讀一下設計模式,你能收貨不少。
你要先學會用依賴注入容器。
Laravel的Facade就是從容器呼叫服務的捷徑。
沒有Facade的時候,你可能要這樣拿到一個服務/對象,然後呼叫:
$service = App::make('some_service'); $service->doSomething();
因為你在容器裡註冊了'some_service',所以容器能make一個實例給你。
'some_service'
make
Facade只是用靜態方式簡化了這個使用過程,底層用__callStatic把函數和參數傳給服務實例:
__callStatic
class SomeService extends Facade { protected static function getFacadeAccessor() { return 'some_service'; // 这是容器里的键 } } SomeService::doSomething(); // 底层和第一段代码是类似的
Contract就是一堆框架自帶的接口,可以透過依賴注入來具體實現。
public function index(SomeService $service) { // 等服务容器注入一个SomeService。 $service->doSomething(); }
Facade和Contract只是依賴注入容器的不同使用方式,用Facade就是自己去容器取(把容器當Service Locator用),用Contract就是等容器注入依賴。
門面,往簡單了說,就是為服務容器中綁定的服務起了個別名,利用class_alias函數比如App對應Container類別。
契約,顧名思義,就是一種規定,雙方都認可並且遵守的東西,而“接口”也是具備這些特性,樓主問的,應該“面向接口編程”,面向接口編程,比較難說明白,本人資歷尚淺,需樓主自己多實踐,多體會,見諒…
簡單的說:
外觀
(你說的門面
)是外觀模式
的實作。外观
(你说的门面
)是外观模式
的实现。协议
(你说的契约
)是工厂方法模式
或抽象工厂模式
協定
(你說的契約
)是工廠方法模式
或抽象工廠模式
的實作。閱讀一下設計模式,你能收貨不少。
你要先學會用依賴注入容器。
Laravel的Facade就是從容器呼叫服務的捷徑。
沒有Facade的時候,你可能要這樣拿到一個服務/對象,然後呼叫:
因為你在容器裡註冊了
'some_service'
,所以容器能make
一個實例給你。Facade只是用靜態方式簡化了這個使用過程,底層用
__callStatic
把函數和參數傳給服務實例:Contract就是一堆框架自帶的接口,可以透過依賴注入來具體實現。
Facade和Contract只是依賴注入容器的不同使用方式,用Facade就是自己去容器取(把容器當Service Locator用),用Contract就是等容器注入依賴。
門面,往簡單了說,就是為服務容器中綁定的服務起了個別名,利用class_alias函數
比如App對應Container類別。
契約,顧名思義,就是一種規定,雙方都認可並且遵守的東西,而“接口”也是具備這些特性,樓主問的,應該“面向接口編程”,面向接口編程,比較難說明白,本人資歷尚淺,需樓主自己多實踐,多體會,見諒…