Composite Pattern vs Template Method Pattern
1. Composite Pattern
- Structuration hiérarchique : Permet de traiter des objets individuels et des groupes d'objets de manière uniforme, souvent utilisé pour des structures en arbre comme des formulaires et des sous-formulaires dans une application.
- Uniformité : Chaque composant (champ de formulaire ou sous-formulaire) est manipulé de la même manière, que ce soit un objet simple ou un ensemble d'objets.
- Exemple : Gestion d'une structure de formulaires où chaque formulaire peut contenir des champs individuels (comme un champ de texte) ou d'autres sous-formulaires.
2. Template Method Pattern
- Structure d'algorithme : Définit une structure globale pour une page ou un processus, tout en permettant à des sous-modèles (ou sous-classes) de remplir ou de personnaliser certaines parties spécifiques.
- Réutilisation : Centralise la logique générale (comme une mise en page globale dans un template Blade) et permet de personnaliser des sections spécifiques dans des vues enfants.
- Exemple : Génération d'un formulaire Blade avec un layout général et des sections spécifiques à remplir par des vues enfants.
Comparaison directe :
| Caractéristique | Composite Pattern | Template Method Pattern |
|---|---|---|
| Objectif principal | Uniformiser le traitement d'objets simples et composites | Définir une structure générale avec des étapes spécifiques modifiables |
| Structure | Hiérarchique, objets et collections traités de manière similaire | Algorithme structuré avec des sections personnalisables dans les sous-templates |
| Flexibilité dans les comportements | Moyenne, dépend de la structure hiérarchique | Très flexible, chaque vue enfant peut définir des sections personnalisées |
| Complexité cachée | Manipule des objets de manière récursive | Structure centrale, laissant la personnalisation des détails aux vues enfants |
| Exemple d'application | Gestion de formulaires et sous-formulaires imbriqués | Layout global de Blade avec des sections spécifiques à compléter |
Exemples
1. Composite Pattern
Dans cet exemple, on gère une structure hiérarchique de formulaires où chaque formulaire peut contenir des champs individuels ou d'autres sous-formulaires. Le code montre comment imbriquer et afficher les formulaires de manière récursive.
$mainForm = new Form('MainForm');
$mainForm->add(new InputField('Name'));
$mainForm->add(new InputField('Email'));
$subForm = new Form('AddressForm');
$subForm->add(new InputField('Street'));
$subForm->add(new InputField('City'));
$mainForm->add($subForm);
echo $mainForm->display(); // Affiche récursivement les champs et sous-formulaires
2. Template Method Pattern
Dans cet exemple, nous avons une structure Blade où un layout parent définit la structure globale (par exemple, le header et le footer du formulaire), tandis que des vues enfants personnalisent les sections spécifiques (par exemple, le contenu du formulaire).
<!-- Layout Blade -->
<html>
<body>
<header>@yield('header')</header>
<div>@yield('content')</div>
<footer>@yield('footer')</footer>
</body>
</html>
Dans une vue enfant, tu définis uniquement le contenu spécifique :
@extends('layouts.main')
@section('header')
<h1>Formulaire d'utilisateur</h1>
@endsection
@section('content')
<form>
<input type="text" name="name" placeholder="Nom">
<input type="email" name="email" placeholder="Email">
</form>
@endsection
Explications
Dans le Composite Pattern, la structure hiérarchique permet de gérer des formulaires imbriqués, où chaque composant (qu'il s'agisse d'un champ simple ou d'un sous-formulaire) est traité de manière uniforme via une méthode comme
display(). Cela permet d'afficher la structure entière du formulaire de manière récursive, sans distinguer les composants simples des composites.Le Template Method Pattern, quant à lui, est utilisé pour définir une structure globale (par exemple, un layout de page) et laisser les vues enfants personnaliser certaines sections. Cela permet de réutiliser une structure générale tout en permettant à chaque vue de définir les parties spécifiques comme le contenu du formulaire ou les titres.
Cas d'utilisation des patterns
Le Composite Pattern est utile lorsque tu dois manipuler des structures imbriquées, comme des formulaires qui contiennent des sous-formulaires. Cela permet de traiter chaque élément de manière uniforme, qu'il s'agisse d'un champ simple ou d'une structure complexe imbriquée.
Le Template Method Pattern est idéal lorsque tu veux centraliser une structure globale (comme un layout Blade) tout en permettant la personnalisation de certaines sections spécifiques par des sous-templates (vues enfants). Cela permet de maintenir une cohérence tout en offrant de la flexibilité.
Conclusion
Le Composite Pattern et le Template Method Pattern offrent des solutions pour structurer et organiser le code de manière modulaire et réutilisable, mais ils sont adaptés à des contextes différents.
Le Composite Pattern est parfait pour des structures hiérarchiques comme des formulaires imbriqués, où chaque élément (champ ou sous-formulaire) est traité de manière uniforme.
Le Template Method Pattern est plus adapté à des situations où une structure globale (comme un layout Blade) doit être suivie, mais où certaines parties doivent être personnalisées par des sous-modèles.
Les deux patterns apportent des solutions élégantes à des problèmes courants en développement web, en améliorant la modularité et la maintenabilité du code.