Je lis Laravel Facades 时想到了这句话,Facade 的主要危险是类范围 Creep
. Ceci est le deuxième paragraphe, voici le lien https://laravel.com/docs/6.x/facades#when-to-use-facades
Que signifie la dérive de la portée de la classe ?
Je ne trouve aucune ressource pour comprendre la dérive de la portée des classes.
La réponse à votre question est en fait donnée dans la phrase suivante, cependant, j'avoue que je suis très confus lorsque je commence à utiliser Laravel. Donc en gros :
Cela signifie que trop utiliser des façades (pas seulement dans Laravel, mais en général) peut rendre votre code plus volumineux et difficile à lire. (va mieux pourquoi vous devriez utiliser des looks)
Les façades peuvent également évoluer vers de nombreuses choses au-delà de leur objectif initial, et comme le dit Refactoring Guru (sans affiliation), les façades - si elles sont mal utilisées - peuvent devenir des objets divins. p>
Si vous comptez utiliser des façades et que vous ne savez toujours pas comment les utiliser, je vous recommande de lire Principe de responsabilité unique et (avis précédent) En cas de doute, n'utilisez pas de façades.
Exemple
Cette section est en fait un guide « Ne faites pas ça », pour une lecture rapide de Alors, ne faites pas ça ! « Lecteurs, ne faites pas ça !
J'ai modifié ma réponse pour ajouter un exemple plutôt ridicule de surutilisation de la façade de deux manières différentes.
Vous réalisez que les façades résolvent vraiment le problème des modèles d'injection de dépendances, qui veut s'inquiéter de tout ce genre de choses avec des portées, des statistiques et des traits ? Vous commencez donc à utiliser des façades sur tout. Dois-je ajouter où à la requête précédente ? simple! Créez-lui un look et nommez-le
Scope::where($model, $column, $equals)
,想要与数据库对话,但DB::query
刚刚开始太长? Facades 为您提供支持,将它们放入DataModel::longQuery()
中并在任何地方使用它们。厌倦了一直调用ProductResource::collection
吗?将其放入名为Resource::collection($model)
dans le nouveau look.Vous avez ajouté une façade pour vous aider à générer le lien de paiement, vous l'appelez donc simplement dans la méthode
Payment
并最初将其与Payment::generateLink()
一起使用,之后一段时间后,您会发现您还需要为网站内支付小部件生成视图,因此您添加了一个Payment::view()
,几个月后,当您需要与您的支付提供商讨论您的发票历史记录,只需将其添加到Payment::getReceipts
. Votre façade de paiement est désormais une classe géante qui gère trop de choses sans rapport au même endroit.Dans les deux exemples, vous pouvez clairement constater la surutilisation des looks à travers des erreurs de codage courantes. Même si mes exemples sont un peu exagérés, je pense qu'il est facile d'imaginer comment ces choses pourraient se produire dans la vraie vie en quelques mois.