Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Design Patterns en PHP
  3. Introduction aux design patterns
Extrait - Design Patterns en PHP Les 23 modèles de conception : descriptions et solutions illustrées en UML2 et PHP (2e édition)
Extraits du livre
Design Patterns en PHP Les 23 modèles de conception : descriptions et solutions illustrées en UML2 et PHP (2e édition)
2 avis
Revenir à la page d'achat du livre

Introduction aux design patterns

Principes de base du concepteur objet

L’étude des design patterns nous donne l’occasion de revenir sur certains concepts fondamentaux de la programmation orientée objet (POO), car ils en font un usage intensif.

Vous connaissez déjà les principes fondamentaux de la POO qui sont :

  • l’héritage ;

  • l’encapsulation ;

  • l’abstraction ;

  • le polymorphisme.

Mais sauriez-vous énoncer les différents principes SOLID ?

1. Les principes SOLID

Ces cinq principes sont extraits d’un article paru en 2000 et écrit par l’informaticien américain Robert C. Martin, surnommé affectueusement « Uncle Bob » par la communauté internationale des développeurs.

a. Le principe de responsabilité unique

Une classe ne doit avoir qu’une seule responsabilité (S pour Single Responsibility). Prenons le code PHP suivant :

class Logger 
{ 
   protected string $type; 
    
 
   public function __construct(string $type) 
   { 
       if (!in_array(strtolower($type), ['fichier', 'bdd'])) { 
           throw new InvalidArgumentException('Type non pris en 
charge'); 
       } 
 
       $this->type = $type; 
   } 
 
   public function logDansFichier(string $nomFichier, string 
$information): void 
   { 
       if ($this->type == 'fichier' && is_writable($nomFichier)) { 
           // ... 
       } 
   } 
 
   public function logDansBaseDonneesSQL(string $chaineConnexion, 
string $information): void 
   { 
       if ($this->type == 'bdd' && !empty($chaineConnexion)) { 
           // ... 
       } 
   } 
} 

Ce logger écrit dans une base de données et dans un fichier. Pourquoi ne pas lui faire faire qu’une chose à la fois ? En faisant ceci, nous lui octroyons une seule responsabilité. Faisons...

Design patterns ou modèles de conception

Les design patterns répondent à des problèmes de conception fréquemment rencontrés dans le cadre de la programmation par objets. Ce sont des solutions reconnues et éprouvées dont la conception provient de l’expérience de programmeurs aguerris.

Les design patterns sont basés sur les bonnes pratiques de la programmation orientée objet ; ils ne sont pas gravés dans le marbre et il est possible de les adapter à sa convenance, tout comme il est possible d’en créer de nouveaux !

Ces patrons de conception constituent un outil précieux pour les concepteurs et développeurs désireux de produire du code de qualité, mais ils ne sont en aucun cas indispensables pour garantir la robustesse d’un développement logiciel. 

Vous les utilisez peut-être déjà sans le savoir et vous allez désormais pouvoir les nommer selon un vocabulaire partagé par une communauté toute entière depuis des décennies.

Gare toutefois à la patternite, cette maladie hélas répandue qui consiste à vouloir forcer l’usage de ces précieux alliés dans des parties d’un développement où ils ne sont pas forcément pertinents (voire contre-productifs). Lorsque j’ai découvert...

Description des design patterns

Les design patterns vous sont décrits et mis en œuvre à l’aide des deux langages suivants :

Les design patterns sont introduits de la partie 2 - Design patterns de construction à la partie 4 - Design patterns de comportement. Pour chaque design pattern, les éléments suivants sont présentés :

  • Le nom du design pattern.

  • Sa description.

  • Un exemple décrivant le problème et la solution basée sur le design pattern décrit sous la forme d’un diagramme de classes UML. Au sein de ce schéma, le corps des méthodes est décrit à l’aide de notes en pseudo-code.

  • La structure générique du design pattern, à savoir :

  • Son schéma en dehors de tout contexte particulier sous la forme d’un diagramme de classes UML.

  • La liste des participants au design pattern.

  • Les collaborations au sein du design pattern.

  • Les domaines d’application du design pattern.

  • L’exemple présenté cette fois sous la forme d’un programme PHP complet. Ce programme est développé pour une utilisation en ligne de commande, il n’utilise donc pas d’interface graphique mais exclusivement les entrées/sorties de...

Catalogue des design patterns

Dans ce livre, nous présentons les vingt-trois design patterns introduits dans l’ouvrage de référence du GoF. Ces design patterns sont autant de réponses différentes à des problèmes connus de la programmation orientée objet. La liste qui suit n’est pas exhaustive, elle provient, comme nous l’avons déjà expliqué, de l’expérience. Les noms des design patterns sont ici donnés en anglais et en français, même si nous ne ferons référence qu’à leur nom anglais tout au long du présent ouvrage.

  • Abstract Factory (Fabrique abstraite) : a pour objectif la création d’objets regroupés en familles sans devoir connaître les classes concrètes destinées à la création de ces objets.

  • Builder (Monteur) : permet de séparer la construction d’objets complexes de leur implémentation de sorte qu’un client puisse créer ces objets complexes avec des implémentations différentes.

  • Factory Method (Fabrique) : a pour but d’introduire une méthode abstraite de création d’un objet en déléguant aux sous-classes concrètes la création effective.

  • Prototype : permet la création de nouveaux objets par duplication d’objets...

Organisation du catalogue des design patterns

Pour organiser le catalogue des design patterns, nous reprenons la classification du GoF qui organise les design patterns selon leur vocation : construction, structuration et comportement.

Les design patterns de construction ont pour but d’organiser la création d’objets. Ils sont décrits dans la partie 2 - Design patterns de construction. Ils sont au nombre de cinq : Abstract Factory, Builder, Factory Method, Prototype et Singleton.

Les design patterns de structuration facilitent l’organisation de la hiérarchie des classes et de leurs relations. Ils sont décrits dans la partie 3 - Design patterns de structuration. Ils sont au nombre de sept : Adapter, Bridge, Composite, Decorator, Facade, Flyweight et Proxy.

Enfin, les design patterns de comportement proposent des solutions pour organiser les interactions et pour répartir les traitements entre les objets. Ils sont décrits dans la partie 4 - Design patterns de comportement. Ils sont au nombre de onze : Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method et Visitor.

Aspects spécifiques des exemples de code PHP

Le code donné en exemple dans cet ouvrage utilise des namespaces et un unique fichier de chargement automatique pour l’ensemble des design patterns. Pour faciliter la lecture de ces exemples, aucune balise phpDocumentor n’a été utilisée. Cependant, l’usage de celles-ci est vivement recommandé dans le cadre de développements professionnels.

Une utilisation des types stricts a été décidée pour contourner les écueils potentiellement provoqués par le typage dynamique utilisé de base par le langage PHP.

La version de PHP utilisée pour l’ écriture du code de cet ouvrage est 8.0.1. Notons enfin que le code fourni dans les exemples est conforme aux spécifications des règles de codage PSR-12. Ces préconisations, visant à unifier les pratiques de développement en PHP, sont disponibles à l’adresse suivante : https://www.php-fig.org/psr/psr-12/