Jour 2 - Introduction à la Conception Orientée Domaine (DomainDriven Design - DDD)
Agrégats et Repositories
Dans le Domain-Driven Design (DDD), les Agrégats et les Repositories sont deux concepts clés utilisés pour structurer et persister les objets métier. Voici une explication de chaque concept :
Les Agrégats sont des groupes d’objets métier apparentés qui sont traités comme une unité atomique lors des opérations de persistance et de transaction. Un Agrégat est composé d’une Entité racine et d’autres objets associés, tels que des Entités enfants ou des Value Objects.
L’Entité racine de l’Agrégat est responsable de maintenir la cohérence et la validité de l’Agrégat dans son ensemble. Toutes les modifications apportées à l’Agrégat doivent passer par l’Entité racine.
Les Agrégats sont souvent utilisés pour garantir la cohérence des données et pour réduire la complexité lors des opérations de persistance et de transaction.
Les Repositories sont des composants responsables de la persistance et de la récupération des objets métier, tels que les Entités et les Agrégats. Un Repository agit comme une couche d’abstraction entre le code métier et le système de stockage sous-jacent, tel qu’une base de données.
Les Repositories offrent une interface permettant d’effectuer des opérations de CRUD (Create, Read, Update, Delete) sur les objets métier, tout en masquant les détails de persistance spécifiques.
Les Repositories sont souvent conçus pour travailler avec des Agrégats plutôt qu’avec des Entités individuelles, ce qui permet de garantir la cohérence des opérations de persistance au niveau de l’Agrégat.
Voici quelques points clés à retenir sur les Agrégats et les Repositories :
Les Agrégats regroupent des objets métier liés et fournissent une unité de transaction cohérente.
Les Repositories offrent une abstraction pour la persistance et la récupération des objets métier, en masquant les détails de stockage sous-jacents.
Les Repositories sont souvent conçus pour travailler avec des Agrégats plutôt qu’avec des objets individuels, ce qui facilite la gestion de la cohérence des données.
En utilisant les Agrégats et les Repositories de manière appropriée, les développeurs peuvent concevoir des modèles de domaine solides et cohérents, tout en simplifiant les opérations de persistance et en favorisant la réutilisabilité du code. Cela conduit à des systèmes logiciels plus robustes, plus évolutifs et plus alignés sur les besoins métier réels.Dans le Domain-Driven Design (DDD), les invariants et les règles métier sont des concepts essentiels pour garantir la cohérence et l’intégrité des données dans le modèle de domaine d’une application. Voici une explication de chaque concept :
Les invariants sont des conditions ou des règles qui doivent toujours être vraies pour maintenir la cohérence des objets métier dans un état valide.
Les invariants sont des garanties de la validité des données à un moment donné. Ils peuvent être des contraintes simples, telles que des valeurs minimales ou maximales pour les attributs, ou des conditions plus complexes impliquant plusieurs objets métier.
Les invariants sont généralement vérifiés lors de la création ou de la modification d’objets métier, et les opérations qui violent les invariants sont souvent rejetées ou corrigées.
Les règles métier décrivent les politiques, les exigences et les processus qui régissent le comportement et les interactions dans le domaine métier d’une application.
Les règles métier peuvent être aussi simples que des validations de données ou des restrictions d’accès, ou aussi complexes que des workflows métier complets impliquant plusieurs objets et acteurs.
Les règles métier sont souvent utilisées pour guider la logique métier dans l’application et pour garantir que les opérations effectuées respectent les exigences et les contraintes spécifiées par le domaine.
Voici quelques exemples d’invariants et de règles métier dans différents domaines d’application :
Dans un système de gestion des stocks, un invariant pourrait être que la quantité en stock d’un produit ne peut jamais être négative.
Dans un système de réservation d’hôtel, une règle métier pourrait être que les chambres ne peuvent être réservées que si elles sont disponibles pendant la période spécifiée.
Dans un système de gestion des comptes bancaires, un invariant pourrait être que le solde d’un compte ne peut jamais être inférieur à zéro.
En utilisant des invariants et des règles métier dans le modèle de domaine d’une application, les développeurs peuvent garantir que les données sont maintenues dans un état cohérent et valide, en alignant les fonctionnalités de l’application avec les exigences du domaine métier. Cela conduit à des systèmes logiciels plus robustes, plus fiables et plus alignés sur les besoins réels des utilisateurs finaux.