Les modèles de conception de logiciels sont mieux définis par Martin Fowler:
Les modèles fournissent un mécanisme permettant de rendre des conseils de conception dans un format de référence. La conception de logiciels est un sujet très vaste et, face à un problème de conception, vous devez être capable de vous concentrer sur une tâche aussi proche que possible du problème..
Le code qui utilise des modèles de conception est facile à comprendre, à maintenir et à étendre. Ce tutoriel a pour but de promouvoir la façade à Laravel.
Selon la définition de la Gang of Four, le façade modèle de conception est un modèle structurel qui définit une interface simplifiée vers un sous-système plus complexe. Le modèle est basé sur la création d’une interface de façade simple devant la collection de la logique et des méthodes requises. La façade elle-même maintient les dépendances.
La façade est très semblable à la adaptateur et décorateur modèles. L'adaptateur agit comme un pont entre deux interfaces incompatibles, tandis que le décorateur est plus complexe et permet de modifier de manière dynamique le comportement des objets..
La syntaxe douce, utilisée par Laravel, rend l'écriture du code plus propre et plus facile à comprendre. Les façades de Laravel sont en fait le sucre syntaxique pour le lieu de service.
Jetons un coup d'œil à la façade de Laravel et à son fonctionnement. le Cache
La façade de Laravel ressemble à ceci:
php Cache :: get ('clé');
Bien qu'il puisse sembler qu'il utilise une charge de méthodes statiques, Laravel fournit en fait une interface aux classes disponibles dans le conteneur de services de l'application. Comme vous le savez probablement déjà, le code écrit ci-dessus est équivalent à:
php $ app = app (); $ app-> make ('cache') -> get ('clé');
La façade de Laravel localise des objets dans fournisseur / Laravel / framework / src / Illuminate / Support / Façades
tandis que la façade Cache est placée dans Cache.php
:
Espace de noms php Illuminate \ Support \ Facades; La classe Cache includes Facade / ** * Obtient le nom enregistré du composant. * * @retour string * / protected static function getFacadeAccessor () return 'cache';
Quand on utilise cache :: get ('clé')
nous appelons en fait la classe supérieure. Assurez-vous de créer l'alias de la classe susmentionnée dans le fichier de configuration. config / app.php
:
php 'aliases' => [//… 'Cache' => Illuminer \ Support \ Façades \ Cache :: class,
Les alias sont configurés automatiquement par le chargeur automatique Laravel. Définir le nom de la classe sur cache crée une cohérence avec la façade. Cette option rendra sûrement les utilisateurs de façades plus à l'aise avec votre code.
Les trois méthodes suivantes sont essentielles pour générer une façade:
getFacadeAccessor
méthode dans la classe enfant.résoudreFacadeInstance
méthode est responsable de la résolution de l'instance appropriée du service.L'implémentation des méthodes de classe de façade:
"php //… fonction statique publique __callStatic ($ method, $ args) $ instance = static :: getFacadeRoot (); switch (count ($ args)) case 0: return $ instance -> $ method ();
cas 1: return $ instance -> $ method ($ args [0]); cas 2: return $ instance -> $ method ($ args [0], $ args [1]); cas 3: return $ instance -> $ method ($ args [0], $ args [1], $ args [2]); cas 4: return $ instance -> $ method ($ args [0], $ args [1], $ args [2], $ args [3]); défaut: return call_user_func_array (array ($ instance, $ method), $ args); "
__callStatic
appelle fondamentalement le conteneur IoC pour se lier à la classe. Il appelle également sa méthode (non statique) en utilisant le cas de commutation via le PHP call_user_func_array ()
fonction, en passant le tableau de paramètres à l'objet de retour getFacadeRoot ()
méthode. le getFacadeRoot ()
La méthode est indiquée comme suit:
php public static function getFacadeRoot () return static :: resolFacadeInstance (static :: getFacadeAccessor ());
Et le resolvefacadeinstance ()
:
"Fonction statique protégée par php resolFacadeInstance ($ name) if (is_object ($ name)) renvoie $ name;
if (isset (static :: $ resolInstance [$ name])) return static :: $ resolInstance [$ name]; return static :: $ resolInstance [$ name] = static :: $ app [$ name]; "
Comme présenté à la dernière ligne de l'article, dans le résoudreFacadeInstance
méthode, Laravel renvoie l’instance du localisateur de service. Le localisateur étant une instance pure de la classe d'origine, nous concluons que la façade de Laravel ne correspond pas à la définition du motif de façade de GoF. Ce ne sont que des points de service. Contrairement à la façade de Laravel, la Real Facade rend l’écriture de tests unitaires difficile et parfois même impossible, en raison de la création de dépendances codées en dur..
Pour ceux qui croient que DI via constructeur est une meilleure option que d’utiliser la façade de Laravel, je voudrais vous informer que de la configuration supplémentaire peut être incluse..
Je veux créer un fichier de contrôle Laravel Facade qui est chargé de vérifier si le fichier d’entrée est un pdf ou non. Pour ce faire, nous devons avant tout créer un Est Pdf
Classe dans App / MyFacade / IsPdf.php
:
"espace de noms php App \ MyFacade;
classe IsPdf private $ pdf = “\ x25 \ x50 \ x44 \ x46 \ x2D”;
Fonction publique check ($ file) return (file_get_contents ($ file, false, null, 0, strlen ($ this-> pdf)) === $ this-> pdf)? vrai faux; "
Deuxièmement, liez la classe au fournisseur de services. Vous allez créer le nouveau fournisseur de services, qui sera situé dans App \ Providers \ IsPdfServiceProvider:
"Espace de noms php App \ Providers;
utilisez Illuminate \ Support \ Facades \ App; utilisez Illuminate \ Support \ ServiceProvider;
La classe IsPdfServiceProvider étend ServiceProvider / ** * Bootstrap les services de l'application. * * @return void * / public function boot () //
/ ** * Enregistrez les services de l'application. * * @retour void * / public function register () App :: bind ('IsPdf', function () retour new \ App \ MyFacade \ IsPdf;);
"
Troisièmement, créer la classe Facade, en tant qu’extension de la classe mentionnée précédemment Illuminer \ Support \ Façades \ Façade
. Vous allez créer la classe qui sera située dans App \ Façades \ IsPdfFacade.php
.
"Espace de noms php App \ Facades; utilisez Illuminate \ Support \ Facades \ Facade;
la classe IsPdf s'étend à Facade , fonction statique protégée getFacadeAccessor () return 'IsPdf'; "La dernière étape consiste à enregistrer la façade dans config / app.php:
"php / * * fournisseurs de services d'application… * / App \ Providers \ IsPdfServiceProvider :: class,
"
Et l'alias:
php 'IsPdf' => App \ Façades \ IsPdf :: class
Toutes nos félicitations! Vous avez créé avec succès une façade de Laravel. N'hésitez pas à tester la façade en utilisant certains codes, tels que:
php Route :: get ('/', function () IsPdf :: check ('/ fichiers / fichier.pdf'););
Nous savons maintenant que la façade de Laravel rend les méthodes d’appel très faciles à utiliser, et l’injection des dépendances réelles pourrait s'avérer très rentable. Bien sûr, Laravel Facade a ses propres avantages et inconvénients. Cela dépend du développeur pour choisir la bonne option.
Pour des ressources supplémentaires sur Laravel, assurez-vous de consulter l'offre sur le marché..
Qui sait, cet article vous encouragera peut-être à développer un code agnostique pour les frameworks et à oublier l’utilisation de façades! Bonne chance!