Jeudi 26 avril 2018, deux de nos Agiciens ont animé un Lunch&Learn à propos des design patterns. Aujourd’hui, il nous propose une rétrospective de leur travail !
Design pattern : le B.A-B.A
Entre le singleton, le memento ou encore l’abstrait, vous avez sûrement déjà entendu parler des design patterns. Tous ces outils permettent de schématiser des motifs de conception. En effet, depuis le début de l’informatique les problématiques de conception rencontrées sont bien souvent les mêmes. Au lieu de réinventer la roue à chaque fois, l’idée a été de formaliser les solutions avec la création de design patterns pouvant être réutilisés maintes fois.
Malheureusement, ces concepts sont souvent oubliés ou ignorés. C’est pourquoi, nous avons décidé de réaliser un Lunch&Learn sur ce sujet ! Il était important pour nous de pouvoir donner des exemples d’application de ces design patterns sur des éléments concrets.
Pour rappel, un design pattern répond à une problématique précise. Pendant notre Lunch&Learn, nous avons donc exposé une problématique et étudié le meilleur moyen de répondre à celle-ci conceptuellement !
Nous en avons conclu que l’utilisation d’un design pattern doit être intuitive, elle permet :
– D’accélérer le processus de développement
– D’anticiper des problématiques
– D’améliorer la lisibilité
General Responsibility Assignment Software Patterns
Si les design patterns du « Gang of Four » sont connus, ceux de GRASP le sont moins. GRASP signifie General Responsibility Assignment Software Patterns/Principles. Ces patrons de conception donnent des conseils généraux sur l’assignation de responsabilité aux classes et objets dans une application. Ils sont issus du bon sens de conception et sont intuitifs. Les patrons de conception GRASP sont les suivants :
– Expert en information : affecter les responsabilités aux classes détenant les informations nécessaires.
– Créateur : déterminer quelle classe a la responsabilité de créer les instances d’une autre classe.
– Faible couplage : diminuer le couplage des classes afin de réduire leurs interdépendances dans le but de faciliter la maintenance du code.
– Forte cohésion: avoir des sous-classes terminales très spécialisées.
– Contrôleur : affecter la responsabilité de réception et traitement de messages systèmes.
– Polymorphisme : affecter un nouveau comportement à la hiérarchie des classes.
– Fabrication pure: créer des classes séparées pour des fonctionnalités génériques qui n’ont aucun rapport avec les classes du domaine applicatif.
– Indirection : découpler des classes en utilisant une classe intermédiaire.
– Protection: ne pas communiquer avec des classes inconnues.
Il n’est pas indispensable de les connaitre par cœur mais il semble important de s’en servir comme source d’inspiration.
Pour aller plus loin
Les éléments présentés ne datent pas d’hier (années 90). Depuis, les technologies ont bien évolué et les problématiques rencontrées se sont multipliées.
Les design patterns présentés ci-dessus ne représentent qu’une partie de ceux que l’on classe dans les design patterns de conception. On peut encore citer l’injection de dépendances qui est très largement utilisée aujourd’hui pour diminuer le couplage entre les différents composants d’une architecture logicielle.
Notez, par exemple, que les aspects de la programmation parallèle ne sont pas abordés. Les supercalculateurs (utilisés essentiellement dans les domaines scientifiques) mais aussi la généralisation des machines multicœurs et multiprocesseurs obligent, quand on souhaite profiter de ce potentiel, à revoir la façon de programmer. Il faut alors faire face aux problématiques qui en découlent :
– Découpage des tâches ou des données
– Synchronisation
– Communication
– Répartition de la charge
Nous n’avons pas non plus intégré les designs d’architecture dans notre présentation qui apportent des solutions dans l’organisation des différentes parties qui composent le logiciel. L’un des plus connus dans le développement d’application web est le pattern MVC.
Conclusion
Il est essentiel de noter que la plupart des problématiques auxquelles nous sommes confrontés dans notre métier ont déjà trouvé des solutions éprouvées et décrites à travers les design patterns. Ils se déclinent à tous les niveaux, le tout est de savoir quand et comment les utiliser. Leur mise en pratique régulière permet de mieux les comprendre jusqu’à ne plus pouvoir s’en passer ! Les ignorer serait comme ignorer l’existence du marteau pour enfoncer un clou.