recherche

Maison  >  Questions et réponses  >  le corps du texte

Problèmes avec la "façade" et le "contrat" ​​de Laravel

Problèmes avec la « façade » et le « contrat » de Laravel :
Il y a deux questions :
1 Quels sont les scénarios d'utilisation de ces deux choses ?
2. Je ne comprends pas pourquoi ces deux mots sont utilisés. J'ai l'impression qu'ils sont complètement incohérents. Ces deux mots ont-ils quelque chose à voir avec leurs fonctions ?

过去多啦不再A梦过去多啦不再A梦2780 Il y a quelques jours495

répondre à tous(3)je répondrai

  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:49:41

    En termes simples :
    Apparence (la Façade dont vous parlez) est l'implémentation du Mode Apparence. 外观(你说的门面)是外观模式的实现。
    协议(你说的契约)是工厂方法模式抽象工厂模式Le Protocole (le Contrat dont vous parlez) est l'implémentation du Factory Method Pattern ou du Abstract Factory Pattern.

    Lisez les modèles de conception et vous gagnerez beaucoup.

    répondre
    0
  • 高洛峰

    高洛峰2017-05-16 16:49:41

    Vous devez d'abord apprendre à utiliser les conteneurs d'injection de dépendances.

    Laravel's Facade est un raccourci pour appeler des services depuis le conteneur.

    Lorsqu'il n'y a pas de Façade, vous devrez peut-être vous procurer un service/objet comme celui-ci puis appeler :

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

    Parce que vous avez enregistré 'some_service' dans le conteneur, le conteneur peut créer une instance pour vous. 'some_service',所以容器能make一个实例给你。

    Facade只是用静态方式简化了这个使用过程,底层用__callStatic

    Facade simplifie simplement le processus d'utilisation de manière statique. La couche inférieure utilise __callStatic pour transmettre des fonctions et des paramètres à l'instance de service :

    class SomeService extends Facade
    {
        protected static function getFacadeAccessor()
        {
            return 'some_service'; // 这是容器里的键
        }
    }
    
    SomeService::doSomething(); // 底层和第一段代码是类似的

    Contract est un ensemble d'interfaces fournies avec le framework, qui peuvent être implémentées via l'injection de dépendances.

    public function index(SomeService $service) { // 等服务容器注入一个SomeService。
        $service->doSomething();
    }

    Facade et Contract ne sont que des manières différentes d'utiliser les conteneurs d'injection de dépendances. Pour utiliser Facade, vous accédez au conteneur pour l'obtenir vous-même (utilisez le conteneur comme localisateur de services), et pour utiliser Contract, vous attendez que le conteneur injecte des dépendances. . 🎜

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 16:49:41

    Facade, pour faire simple, consiste à donner un alias au service lié dans le conteneur de service, en utilisant la fonction class_alias
    Par exemple, App correspond à la classe Container.

    Un contrat, comme son nom l'indique, est une règle que les deux parties reconnaissent et respectent, et « interface » a également ces caractéristiques. L'affiche demandait qu'il devrait s'agir d'une « programmation orientée interface ». expliquez clairement. Je suis encore relativement inexpérimenté, l'affiche a besoin de plus de pratique et d'expérience, s'il vous plaît, pardonnez-moi...

    .

    répondre
    0
  • Annulerrépondre