84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
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类。
契约,顾名思义,就是一种规定,双方都认可并且遵守的东西,而“接口”也是具备这些特性,楼主问的,应该“面向接口编程”,面向接口编程,比较难说明白,本人资历尚浅,需楼主自己多实践,多体会,见谅…