Pour clarifier davantage mon problème initial, j’ai réécrit la question avec plus de termes ‘DDD’, de modèles communs et d’arguments de discussion. La version originale peut être trouvée sous révisions .
Où et comment les identités d’ entités / racines d’ agrégat sont-elles générées dans le domaine lors de l’application correcte de DDD?
Je dois atsortingbuer des identités uniques à mes entités, que ce soit lors de leur création ou de leur persistance. Ces identités peuvent se présenter sous plusieurs styles
Il existe de nombreuses approches pour la tâche de génération et d’atsortingbution d’identités, depuis l’utilisation d’ usines pour créer des identités, la délégation à l’infrastructure via ORM ou la génération de bases de données, etc. vous ne voulez pas de modèles de domaine anémique et d’ injection de services dans des entités ?
Je le placerais dans une usine. Générer un identifiant ne devrait pas faire partie de la logique de domaine, à mon avis, car c’est vraiment une question d’infrastructure. Vous pouvez prendre id de DB ou le générer avec uuid ou autre. C’est un détail Rappelez-vous également que seule l’interface d’une fabrique appartient à la couche de domaine, pas sa mise en œuvre.
À propos de vos doutes pour l’usine, si vous utilisez l’usine pour créer des entités, vous devriez l’utiliser partout. C’est comme ça que je le fais.
Vaughn Vernon, auteur de Implementing Domain Driven Design, préconise la création d’identifiants uniques dans des référentiels comme celui-ci:
public TenantId nextIdentity() { return new TenantId(UUID.randomUUID().toSsortingng().toUpperCase()); }
TenantId
est un object de valeur qui encapsule l’identité de l’entité.