Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Les helpers sont-ils anti-pattern?

Article posté le 17-07-2018 dans la catégorie Développement

Article mis à jour le : 05-05-2022

Est-ce que les helpers sont anti-pattern? Quelle devrait être leur utilisation?

Introduction : le bon vieux temps des helpers.

Les helpers sont des classes outils qui contiennent du code susceptible d'être utilisable partout dans une application. Ceci étant, ce type de code existe également en programmation procédurale et pour autant que je me souvienne (j'ai commencé à coder en 1999) j'en toujours vu, partout.

L'apparition et surtout la démocratisation de l'architecture-pattern MVC n'a pas changé la donne, si la présence de helpers était facilitée par la POO, et favorisant la centralisation d'un code qui était parfois dupliqué, on s'est retrouvé avec des classes en charge d'une bonne partie de la logique d'une application.

Je vais faire le lien avec le language que je connais le plus : PHP. Au milieu des années 2000, le framework le plus en vue était Zend Framework, rapidement rejoint par Symfony. A l'époque pré-PHP 5.3 (1), les helpers avaient un sens, surtout s'ils avaient chacun un but précis (par exemple le helper URL), du moins au départ, mais à la fin on se retrouvait le plus souvent avec des classes qui contenaient du code spaghetti.

Certains diront que ceci est dû à un manque de PHP, qui comme Java ne permet pas l'héritage multiple (2), mais je pense qu'il s'agit toujours d'une confusion : du code réutilisable ne devrait pas se trouver dans des classes abstraites devant être héritées de partout (dédicace au framework Magento 1).

(1) PHP 5.3 a introduit la notion de namespace, identique au package Java, ouvrant la voie à la gestion séparée des modules sans collision de nom, à l'injection de dépendance et à Composer, le gestionnaire de dépendances de PHP.

(2) PHP Utilise les traits comme une alternative à ce manque, mais leur utilisation est rare car dangereuse. Quant à Java, il permet depuis sa version 8 de mettre du code dans des interfaces.

Un héritage dont il faudrait se débarasser ?

Disons-le tout de suite : les helpers sont anti-patterns dans la plupart des cas. Ces classes fourre-tout difficiles à maintenir et à tester sont le plus souvent un vieil héritage qui pose plus de problèmes qu'il n'en résout :

De la bonne pratique des helpers

Néanmoins ne tombons pas dans l'extrémisme. Par exemple, il y a quelques temps un membre de la core team du framework Magento 2 m'a dit qu'ils ne rajouteraient plus de helpers au framework (il faut dire qu'il a sa dose, avec notamment une bonne couche de code portée depuis Magento 1).

Aujourd'hui, les helpers ont encore un sens si ils respectent certaines règles :

 

 


Cet article vous a plu? Découvrez d'autres articles :


comments powered by Disqus