Maison > Questions et réponses > le corps du texte
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 ?
给我你的怀抱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.
高洛峰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
__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. . 🎜曾经蜡笔没有小新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...
.