Design Patterns Demystified – Modèle de conception de modèle


Bienvenue dans la série Design Patterns Demystified (DPD), dans cette édition, nous allons discuter de Template Design Pattern. Alors laissez-nous comprendre le pourquoi, comment, quoi et où du modèle de conception de modèle.

Le pourquoi

Comprenons d’abord pourquoi nous avons besoin de ce modèle à l’aide d’un exemple. Créons une bibliothèque réutilisable qui orchestre l’opération d’achat d’un article sur une plateforme e-commerce. Maintenant, quel que soit ce que vous achetez, vous suivrez la même séquence d’étapes comme la construction de votre panier, l’ajout d’une adresse, le remplissage des détails de paiement, puis la finalisation du paiement. Les détails de ces étapes varient en fonction de ce que vous achetez, du montant que vous achetez, de l’adresse de livraison et du mode de paiement préféré, mais l’orchestration complète des étapes reste la même.

Maintenant, imaginez que vous avez la responsabilité de créer une bibliothèque réutilisable qui est censée être utilisée par de nombreuses plates-formes de commerce électronique différentes pour permettre l’achat de produits sur leur plate-forme. Ici, chaque plate-forme de commerce électronique aura des flux et des exigences différents en termes de tous les facteurs décrits ci-dessus, mais à terme, tous veulent suivre la même séquence d’étapes. Alors, comment vous assurez-vous que votre bibliothèque reste ouverte pour une extension limitée mais fermée pour la modification du comportement global et en même temps, chaque plateforme respecte également le contrat fourni par la bibliothèque? La réponse est, modèle de conception de modèle.

Le quoi

Laissez-nous comprendre ce qu’est la conception de modèle. Dans la conception du modèle, nous créons une abstraction / spécification qui spécifie le comportement global (et nous nous assurons que ce comportement global est immuable) et nous déclarons les étapes internes des comportements globaux mais ne fournissons pas de détails sur les étapes internes, car, si vous vous en souvenez, chaque plateforme / consommateur peut avoir sa propre implémentation de ces étapes internes.

Le comment

Utilisons le même exemple que celui décrit ci-dessus pour montrer comment nous pouvons implémenter ce modèle. L’exemple utilise Java, mais vous êtes libre de choisir votre langage de programmation orienté objet pour cela.

La première étape consiste à créer le EcommercePaymentEngine spécification où nous fournissons l’orchestration mais laissons les détails internes aux adoptants à mettre en œuvre. Voici à quoi ça ressemble:

Voyons ce qui se passe ici. Nous avons une classe abstraite appelée EcommercePaymentEngine. Cela a une finale méthode comme pay(). Il s’agit de la méthode d’orchestrateur. Notez qu’il est intentionnellement rendu final car nous ne voulons pas qu’un implémenteur modifie l’orchestrateur. Cette fonction d’orchestrateur résume toutes les étapes qui sont universelles pour toute plate-forme de commerce électronique (au moins dans le monde utopique de cet article), mais ces méthodes sont abstraites. Il appartient aux plateformes de commerce électronique de fournir des détails sur ces comportements car ces comportements varieront d’une plateforme à l’autre.

Supposons maintenant que deux géants du commerce électronique, Foo et Bar, ont accepté d’utiliser votre génial EcommercePaymentEngine. L’implémentation à la fin de Foo ressemblerait à:

et, normalement, la mise en œuvre à la fin de Bar ressemblerait à:

Maintenant, Foo et Bar peuvent simplement invoquer la méthode de paiement dans leur plate-forme et cela devrait être le cas. Ils obtiendront l’implémentation complète du modèle de EcommercePaymentEngine’s pay() méthode hors de la boîte. Voici un exemple d’implémentation de leur invocation:

Cela produira la sortie suivante:

Le Où

Le modèle de conception de modèle est pratique pour la collaboration et promeut le concept entier de modularité et de réutilisation. Les autres avantages visibles de celui-ci sont la déduplication du code, la gestion facile des versions, etc. Si vous travaillez sur un grand projet, il y aura de nombreuses opportunités pour implémenter ce modèle car ces grands projets ont tendance à avoir beaucoup de duplication et de chevauchement des fonctionnalités. Cela dit, nous ne devons pas abuser de ce modèle; sinon, nous nous retrouverons dans un gâchis de dépendance de modèles étroitement couplés.

Le code complet de ce tutoriel est disponible ici lien.

Bon apprentissage!!

Close Menu