Clean Architecture : Infrastructure vs Core
Cet article fait suite à une présentation plus globale de la Clean Architecture, que vous pouvez retrouver ici !
Imaginez votre application comme une histoire complexe entre deux protagonistes essentiels : le Domaine Métier (Core) et le Domaine Technique (Infrastructure). Leur séparation claire est la base de la Clean Architecture. Découvrons comment cette division, telle une partition bien orchestrée, optimise la maintenabilité, l’évolutivité et la clarté de votre code.
Dans le monde complexe du développement applicatif, la Clean Architecture se distingue par sa capacité à séparer clairement le domaine métier (Core) du domaine technique (Infrastructure). Dans cet article, nous explorerons en détail la séparation entre le Core et l’Infrastructure qui assure une meilleure gestion des complexités logicielles, ainsi que l’importance des cas d’utilisation en tant que pilotes des règles métiers.
Comprendre la Séparation : Core vs Infrastructure
Avant de plonger dans les détails, il est essentiel de comprendre la nature de cette séparation. Le Core représente l’essence même de l’application, où résident les règles métier et les concepts clés. En revanche, l’Infrastructure englobe les détails techniques, tels que l’accès aux bases de données ou la gestion des dépendances externes. Cette distinction claire garantit une gestion efficace des différents aspects de votre application : on ne mélange pas les contraintes techniques avec les règles métiers.
Le Domaine Métier (Core)
Le Core est le rempart de la logique métier, où résident les entités (ou entities) et les cas d’utilisation (use cases). Les entités représentent les objets clés du domaine (les “éléments core”, ce qu’on “présente” au métier), tandis que les cas d’utilisation dirigent l’exécution des règles métier. Cette couche est le cœur de l’application, garantissant la cohérence et la clarté des fonctionnalités.
On peut diviser la partie core en 2 couches : Les entités et les cas d’utilisation. Commençons par la première couche dans le Core, les entités.
Nature des Entités
Les entités représentent les concepts fondamentaux du domaine métier. Elles encapsulent les données et les règles métier essentielles, assurant ainsi la cohérence et l’intégrité des informations. Imaginez-les comme les acteurs principaux d’une pièce de théâtre, chacun ayant un rôle défini à jouer dans l’histoire.
Par exemple, dans une application de gestion de commandes, une entité pourrait représenter une commande ou un produit.
Les entités maintiennent une indépendance stricte vis-à-vis des détails techniques, garantissant ainsi leur réutilisabilité et leur évolutivité. Cette séparation claire permet aux développeurs de se concentrer pleinement sur la logique métier sans être perturbés par les considérations techniques.
Comparez cela à la séparation entre le script d’une pièce de théâtre (Core) et les décors (Infrastructure) — le spectacle peut évoluer sans altérer la trame principale.
Rôle des Cas d’Utilisation
Les cas d’utilisation décrivent les fonctionnalités de l’application du point de vue de l’utilisateur. Ils coordonnent les actions effectuées par les entités pour répondre aux besoins fonctionnels de l’application.
Par exemple, un cas d’utilisation pourrait être “Créer une nouvelle commande” ou “Modifier les détails d’un produit”.
Les cas d’utilisation maintiennent également une séparation claire avec l’Infrastructure, se concentrant uniquement sur la logique métier. Cette approche permet une évolutivité agile, où les fonctionnalités peuvent être ajoutées ou modifiées sans perturber la structure de l’application.
Le Domaine Technique (Infrastructure)
À l’inverse, l’Infrastructure est le décor technique de votre application. Il gère les coulisses, des bases de données aux frameworks externes, veillant à ce que le Core reste isolé des détails techniques. Elle ne va jamais empiéter sur la logique métier. C’est comme un orchestrateur discret, veillant à ce que les détails techniques ne compromettent jamais la clarté et la simplicité du scénario central
Visualisez cette couche comme l’équipe de production dans le monde du cinéma, assurant que le spectacle se déroule sans accrocs tout en restant invisible pour le spectateur.
Gestion des Détails Techniques
L’Infrastructure fournit également des interfaces pour interagir avec ces composants. Par exemple, plutôt que d’accéder directement à une base de données spécifique, le Core utilise une interface définie avec l’Infrastructure pour interagir avec les données.
Séparation des Responsabilités
Enfin, une caractéristique essentielle de l’Infrastructure est sa capacité à séparer les responsabilités. Chaque composant est conçu pour accomplir une tâche spécifique, ce qui facilite la maintenance et l’évolution de cette partie également. Par exemple, un composant responsable de l’accès aux données peut être facilement remplacé ou mis à niveau sans affecter le reste de l’application ou même le reste de la partie technique.
Avantages de la Séparation Core vs Infrastructure
La distinction claire entre le Core et l’Infrastructure offre de nombreux avantages pour le développement des applications.
Maintenabilité et Évolutivité
En isolant la logique métier du reste de l’application, la Clean Architecture facilite la maintenance et l’évolution du code. Les modifications apportées à l’Infrastructure n’ont pas d’impact sur le Core, ce qui permet de mettre à jour ou de remplacer les composants techniques sans perturber les fonctionnalités métier.
On peut par exemple décider de changer du partenaire d’envoi de SMS, sans aucun impact sur le code métier qui reste inchangé.
Compréhension claire de la Code Base
La distinction entre le Core et l’Infrastructure rend le code plus clair et plus compréhensible. Comme je le dis souvent, le ou la PO de l’équipe peut même avoir un oeil sur la partie Core, sans forcément avoir un bagage technique.
Les développeurs peuvent facilement identifier les parties de l’application qui sont responsables de la logique métier et celles qui sont responsables des détails techniques. Cela facilite le débogage, la collaboration et la maintenance à long terme.
Core et Infrastructure, coeur de la clean architecture
La Clean Architecture, avec sa distinction entre le Core et l’Infrastructure, offre une approche solide et structurée pour le développement applicatif. En comprenant pleinement cette séparation et en mettant l’accent sur les entités et les cas d’utilisation comme piliers du domaine métier, vous pouvez créer des applications robustes, évolutives et plus faciles à maintenir.
Un article de Nicolas Lapointe.
Cet article est une introduction à la Clean Architecture, et fait partie d’une série dédiée sur ce sujet. Rendez-vous sur les prochains !
Articles sur la Clean Architecture :