Le pattern "conteneur" (Container)

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

Lorsque l'on développe une application, le principal défi est de donner du sens à son code afin qu'il soit facilement compréhensible et maintenable plus facilement. Une des nombreuses bonnes pratiques est alors d'utiliser des objets-valeurs plutôt que de simples variables. Pour stocker et manipuler ces derniers, il est possible d'utiliser un conteneur, un patron de conception souvent utilisé en parallèle.

En programmation objet, un conteneur n'est ni plus ni moins qu'un objet ayant pour but de gérer une collection d'élément. C'est un pattern assez peu utilisé dans le monde PHP car de nombreux développeurs ont pris l'habitude d'utiliser les tableaux associatifs fournis par le language.

Il y a pourtant de multiples avantages à utiliser un conteneur dans vos applications. On peut citer :

  • Eviter la duplication de code dans les classes
  • Respecter le principe de responsabilité unique (vos objets métiers n'ont pas à ce soucier de comment parcourrir ou rechercher un élément dans un tableau, une liste ou une collection)

Pour vous aider à manipuler des conteneurs dans votre code, PHP fournit quelques interfaces qui peuvent être utiles lors de la mise en place de ces derniers :

Je suis toujours étonné que ce pattern ne soit pas plus connu et utilisé des développeurs PHP. Je rencontre souvent des développeurs qui me disent que la mise en place d'un tel objet est inutile et n'apporte pas de valeur (si ce n'est de complexifier inutilement le code). Sachez que vous manipuler ce genre de classe très souvent sans vous en rendre compte. Lorsque vous utilisez l'ORM Doctrine par exemple, qui utilise un conteneur ArrayCollection pour la gestion des associations multiples des entités.