Probleme mit der „Fassade' und dem „Vertrag' von Laravel
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 16:47:41
0
3
494

Probleme mit der „Fassade“ und dem „Vertrag“ von Laravel:
Es gibt zwei Fragen:
1 Was sind die Verwendungsszenarien dieser beiden Dinge?
2. Ich kann nicht verstehen, warum diese beiden Wörter verwendet werden. Ich habe das Gefühl, dass sie etwas mit ihren Funktionen zu tun haben.

过去多啦不再A梦
过去多啦不再A梦

Antworte allen(3)
给我你的怀抱

简单的说:
外观(你说的门面)是外观模式的实现。
协议(你说的契约)是工厂方法模式抽象工厂模式的实现。

阅读一下设计模式,你能收货不少。

小葫芦

你要先学会用依赖注入容器。

Laravel的Facade就是从容器里调用服务的快捷方式。

没有Facade的时候,你可能要这样拿到一个服务/对象,然后调用:

$service = App::make('some_service');
$service->doSomething();

因为你在容器里注册了'some_service',所以容器能make一个实例给你。

Facade只是用静态方式简化了这个使用过程,底层用__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类。

契约,顾名思义,就是一种规定,双方都认可并且遵守的东西,而“接口”也是具备这些特性,楼主问的,应该“面向接口编程”,面向接口编程,比较难说明白,本人资历尚浅,需楼主自己多实践,多体会,见谅…

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage