Je vais vous parler du dernier livre écrit par Robert C. Martin (alias Uncle Bob) intitulé Clean Architecture: A Craftsman's Guide to Software Structure and Design. Je l’ai connu en tant qu’auteur des livres Clean Code puis The Clean Coder. Ayant apprécié ces livres, qui m’ont aidé à écrire un code de meilleure qualité, quand son nouveau livre est sorti, j'étais ravi !
Le livre explique comment appliquer des principes et techniques qui amènent vers des applications maintenables dans le temps.
Voici la liste des sujets couverts dans ce livre :
- Introduction : définition de design et architecture.
- Paradigmes de programmation (structurée, orientée objet, fonctionnelle).
- Principes SOLID en programmation orientée objet (Responsabilité unique, Ouvert/fermé, Substitution de Liskov, Ségrégation des interfaces, Inversion des dépendances).
- Principes SOLID appliqués aux composants.
- Bonnes pratiques de structuration et de déploiement d’application.
- Comment délimiter les composants ?
- Pourquoi les bases de données, les frameworks et les interfaces utilisateur ne sont que des détails dans une bonne architecture ?
L’introduction nous rappelle que l’architecture d’un logiciel n’est pas le problème le plus urgent bien qu’elle soit importante pour l'évolution de l'application dans le temps. En contraste, l’intégration de nouvelles fonctionnalités est toujours urgente pour produire de la valeur. Le rôle de l’architecte est donc de conserver l’équilibre.
Uncle Bob, étant depuis longtemps dans le monde de l’informatique, nous ramène au commencement de l’informatique avec une leçon sur les paradigmes de programmation. Quand j’ai commencé à lire cette partie, je n’ai pas fait le lien avec le sujet du livre. Avec le recul, je me suis rendu compte que cela fait partie de sa réflexion sur l’architecture car les règles appliquées au plus bas niveau du code restent valables au niveau le plus haut. Par exemple le concept de l'immutabilité utilisé en programmation fonctionnelle est l’idée à la base de l’architecture Event Sourcing. Dans ce genre d’application seuls les événements sont stockés et des fonctions sont appliquées pour retrouver l’état courant.
Nous arrivons ensuite sur la partie SOLID du livre. Connaissant déjà ces principes, j’avais peur de trouver cette partie lassante mais les chapitres s'enchaînent avec aisance. Les explications sur le couplage entre composants sont limpides, même s’il y a un peu de maths au milieu.
Dans la partie suivante, il explique que l’architecture devrait simplifier le développement, le déploiement, l'exploitation et la maintenance. Il faut garder la possibilité de choisir l’architecture aussi longtemps que possible. Il conseille de découper l’application de façon à permettre aux composants de devenir indépendants au cas où il serait nécessaire de les découpler.
Finalement, on arrive sur le principe le plus important du livre : les dépendances doivent toujours aller du code spécifique et infrastructurel au code plus général, jusqu'aux règles métiers, le domaine pour ainsi dire. Ce n’est pas une règle qui est nouvelle. Le parcours sur lequel il nous amène au long de son histoire a renforcé ma conviction sur ce point.
La partie intitulée Details est présente pour renforcer l’idée du principe de dépendance en donnant des exemples concrets. Cela permet de rendre plus tangible cette règle en expliquant pourquoi et comment les composants secondaires comme les bases de données, l'interface utilisateur et les frameworks doivent être séparés du cœur logiciel.
En conclusion, j’aurais préféré que les premiers chapitres soient plus concis car ils ne sont pas réellement en rapport avec l’architecture. En fait, ils servent à préparer le terrain pour la partie sur l’architecture. Cela aurait laissé plus de temps pour des exemples plus concrets. Une suite intitulée Implementing clean architecture avec plusieurs études de cas serait bienvenue.
Uncle Bob nous rapporte son expérience en architecture logiciel dans ce livre. Après avoir lu ce livre, je regarde différemment certaines de mes applications récentes. Je sais ce que j'ai bien fait et je sais ce que je dois améliorer pour les rendre plus maintenables et faciles à changer.
Je vous encourage à ajouter ce livre à votre liste de lecture.