Modèles de conception dans WordPress Le modèle Simple Factory

Dans cette série, nous examinons les modèles de conception et voyons comment nous pouvons les exploiter à notre avantage lorsque nous construisons des produits sur WordPress..

La bonne chose à propos des modèles de conception est qu'ils ne sont pas explicitement limités à des thèmes ou à des plug-ins - ils sont pratiques dans une variété de scénarios différents. Il s'agit simplement de pouvoir identifier les modèles applicables à certains scénarios..

Dans le dernier post, nous avons examiné le modèle Singleton. Dans cet article, nous allons examiner le modèle de fabrique simple, particulièrement utile lorsque vous avez plusieurs classes différentes dont chacune a un objectif unique et résout un problème spécifique..

Dans cet article, nous examinerons un autre modèle, le modèle d'usine simple, qui est utile lorsque vous avez plusieurs classes dont chacune a un but unique et qui peuvent être sélectionnées en fonction de certains critères..


Le modèle de méthode d'usine

Le modèle d'usine simple est en fait dérivé d'un modèle connu sous le nom de modèle de méthode d'usine, qui est une version légèrement plus compliquée du modèle que nous allons examiner..

Selon Wikipedia, le modèle de méthode d'usine est défini comme suit:

Le modèle de méthode d'usine est un modèle de création orienté objet permettant de mettre en œuvre le concept d'usines et traite le problème de la création d'objets (produits) sans spécifier la classe exacte d'objet qui sera créé.

Cela semble un peu compliqué, n'est-ce pas?

La vérité est qu’il s’agit en fait d’un modèle de conception très puissant, mais il faudrait un article beaucoup plus long pour en discuter et c’est un peu hors de portée pour le but de cette série..

Donc, comme mentionné, nous allons jeter un oeil à une version du modèle qui est un peu jumelé et devrait être plus généralement applicable à des projets moins compliqués.

Avant de faire cela, proposons une définition du modèle d’usine simple:

Le modèle Simple Factory renvoie un ensemble de données spécifique ou une classe spécifique en fonction de son entrée..

Ah le risque de faire un jeu de mots, simple, à droite?

Une note sur le modèle de fabrique simple

En réalité, de nombreux ingénieurs en logiciel considèrent l’usine simple comme un idiome plus qu’un modèle à part entière; d'autres considèrent cela comme un motif.

Pour ce que ça vaut, je le vois comme un motif très simple. Il a un cas d'utilisation spécifique qui peut être facilement identifié quand l'utiliser au cours du développement que nous verrons plus loin dans cet article..

Quoi qu'il en soit, je soulève cette question de sorte que si vous voyez cela utilisé comme un idiome (ou un motif) utilisé dans divers articles sur Internet, ou même dans une conversation, vous saurez que les développeurs en question font référence à la même stratégie de programmation. - juste d'une manière différente.

Alors, pourquoi est-ce important dans WordPress?

Tout comme les modèles de conception dans des projets spécifiques autres que WordPress, tels que les applications plus grandes, les modèles de conception constituent un moyen éprouvé de résoudre un problème courant..

Cela aide à abstraire un peu notre code, à garder notre projet facilement maintenable, facilement lisible, et peut réellement nous aider à garder notre code épuré. Cela peut nous amener à avoir plus de des dossiers dans notre projet, mais chaque fichier devrait avoir moins de lignes de code.

Cela signifie que chaque fichier doit avoir un objectif spécifique qui doit être clair, non seulement pour nous, mais également pour les futurs développeurs..


À quoi il ressemble

Maintenant, avant de plonger dans les diagrammes, de parler des classes et des stratégies requises pour mettre en œuvre le modèle actuel, je tiens à mentionner que nous allons adopter une approche simple à cet égard..

Le fait est que le lectorat de ce blog couvre un large éventail d’expériences - certaines personnes apprennent à écrire du code; d'autres qui sont des vétérans chevronnés.

Afin de plaire à la majorité des lecteurs, nous devons trouver un équilibre. Donc, pour ceux d’entre vous qui travaillent dans le génie logiciel depuis des années, cela peut sembler excessivement simpliste; cependant, ne le parcourez pas - peut-être aurez-vous quelque chose de nouveau.

Pour ceux d'entre vous qui sont débutants ou même des programmeurs intermédiaires, portez une attention particulière à ce dont nous discutons, car cela peut générer des dividendes pour les travaux futurs (ou même existants)..

Le but de la simple usine

Alors imaginez ce scénario: vous travaillez sur une fonction qui prend un ensemble d’entrées - généralement un type de chaîne unique ou un entier - et vous avez cette longue sinon déclaration ou peut-être que vous avez ce grand commutateur / boîtier déclaration qui continue de croître à mesure que votre projet se développe.

Le problème est que les conditionnels deviennent difficiles à gérer. En fait, les conditions de cas, ou les blocs de cas, peuvent en réalité faire autant de travail qu'une certaine fonction devrait en faire.

C'est là que la Simple Factory entre en jeu. Ce que nous pouvons faire est d’abréger les détails de chaque condition dans leur propre classe, ce qui facilite grandement la maintenance et le maintien du code beaucoup plus léger..

Et cette est le modèle simple d'usine.

Regard sur le motif

Voici donc les principales caractéristiques du modèle Simple Factory:

  • Notez que la classe Plugin a une référence privée à la classe Factory
  • La classe Factory encapsule toute la logique pour renvoyer un objet du type User
  • La classe User est une classe de base pour trois autres classes: Admin, Volunteer, Reader. L'idée est que chacun de ces types sont des sous-classes d'utilisateurs avec des fonctionnalités uniques.
  • Le plugin recevra un certain type d’intrants qu’il transmettra à la Factory
  • L'usine examinera l'entrée puis, en fonction de sa valeur, renverra l'un des trois types d'utilisateurs.

Rien aussi compliqué, non? Honnêtement, je pense que le diagramme est un peu plus compliqué que les principes en jeu. Il offre vraiment beaucoup de flexibilité notamment chaque fois que vous cherchez à introduire un autre type d'utilisateur comme un éditeur ou quelque chose de similaire.

Remarque: C'est ne pas être confondu avec les types d'utilisateurs intégrés de WordPress. Ceci est simplement un exemple pour montrer à quoi ressemblerait le motif.

Un exemple de travail

Maintenant que nous avons examiné le schéma du modèle, examinons le code source en action. Ci-dessous, nous examinerons le code source de chaque classe, puis nous fournirons un téléchargement pour une démonstration entièrement documentée après la discussion..

Le plugin

Tout d'abord, regardons la classe du plugin. Rappelez-vous qu’il ne s’agit que d’un prototype de l’apparence du motif. Ce n'est pas la même chose qu'un plugin WordPress entièrement développé.

 factory = new Simple_Factory ();  fonction publique get_user ($ permission) return $ this-> usine-> get_user ($ permission); ?>

Notez que le plugin est relativement simple:

  • Il comprend le simple-factory.php script dans l'en-tête du fichier
  • Il définit ensuite un constructeur dans lequel il définit le $ usine propriété à une instance du Simple_Factory
  • La seule méthode disponible dans le plugin est get_user qui renvoie un utilisateur basé sur un type

Nous verrons comment cela entre en jeu après avoir examiné toutes les autres classes..

L'utilisateur

le Utilisateur est une classe de base abstraite qui fournit un constructeur de base et une fonction abstraite devant être implémentée par toutes les autres sous-classes.

 rôle = $ rôle;  fonction publique abstraite get_role (); ?>

Notez que cette classe est destinée à être sous-classée par une variété d'autres classes, que nous allons examiner en détail dans un instant..

L'administrateur, le lecteur et le bénévole

Les quatre classes suivantes sont toutes des fichiers distincts dont chacune sous-classe Utilisateur classe de base. J'ai choisi de les inclure tous ensemble parce qu'il y a si peu de différence par rapport à leur mise en œuvre réelle qu'il devrait être assez facile à suivre.

L'administrateur
 role = "Administrateur";  fonction publique get_role () return $ this-> role; ?>
Le lecteur
 role = "Reader";  fonction publique get_role () return $ this-> role; ?>
Le volontaire
 role = "bénévole";  fonction publique get_role () return $ this-> role; ?>

Comme d'habitude, laissez-moi des questions dans les commentaires; sinon, relisez le code puis assurez-vous de lire La Simple Factory qui est la section suivante - il lie tout cela ensemble.

De plus, n'oubliez pas que tout ce code sera partagé à la fin de l'article avec des commentaires de code décrivant exactement ce qui se passe..

La Simple Factory

le Simple_Factory La classe est vraiment le noeud de tout le schéma. Voici où toutes les décisions sont prises et les objets appropriés sont retournés.

 

Notez que le Simple_Factory inclut la classe d'utilisateurs de base et ses sous-classes, puis fonctionne pour renvoyer le type d'utilisateur approprié en fonction du jeu d'autorisations entrant.


Les avantages du modèle d'usine simple

Même si cela devrait être un peu évident à ce stade de l'article, le modèle Simple Factory présente de nombreux avantages, en particulier si vous avez l'habitude de travailler avec des conditionnels volumineux..

  • Il fournit un moyen élégant d’abstraire votre code afin de réduire l’encombrement visuel.
  • Il vous permet d'introduire des cours spécialisés et ciblés avec un seul but (ce qui est génial si vous suivez les principes SOLID)
  • Cela rend le code plus facile à gérer car il y a un seul endroit où les classes sont instanciées, et chaque classe sert un seul but

Globalement, c’est l’un de mes modèles préférés simplement en matière d’organisation du code et de spécialisation qu’il peut apporter à la table..


Conclusion

Enfin, vous pouvez extraire le code source complet - avec la documentation et les instructions d’installation - sur GitHub en utilisant ce lien..

À ce stade, nous avons examiné trois modèles:

  1. Le modèle d'observateur
  2. Le modèle Singleton
  3. Le modèle d'usine simple

Cette série pourrait aller un pendant un moment; Cependant, je pense que nous avons couvert suffisamment de terrain au moins pour permettre à nombre d'entre nous de commencer à appliquer des modèles à notre travail..

Ainsi, dans le dernier article de la série, nous récapitulerons ce que nous avons appris et nous vous recommanderons également d'autres modèles, leur objectif et d'autres points de recherche qui devraient continuer à vous aider à continuer à en apprendre davantage sur les modèles de conception. et leurs avantages non seulement dans le développement WordPress, mais aussi dans le développement de logiciels en général.