Aller au contenu
Filtrer les règles par style d’implémentation
Style
Tactique
Sévérité
majeure
S’applique à
  • Modèle (domain)
  • Adapters driven

REP-01 · Un repository par aggregate root, pas par entity ni par table ​

Style
Tactique
Sévérité
majeure
S’applique à
  • Modèle (domain)
  • Adapters driven

Signal ​

  • Un repository pour une entity ou un value object interne à un aggregate (WalletBlockRepository à côté de WalletRepository).
  • Un DAO ou un repository générique par table, avec un CRUD complet, dans un bounded context modélisé en aggregates.

Pourquoi ​

Seuls les aggregates ont un repository. En règle générale, chaque type d’aggregate en a exactement un.

Un DAO travaille sur des tables et des opérations CRUD. Comme Table Data Gateway et Active Record, il appartient aux applications en transaction scripts. Il laisse le code lire et changer, au détail, des données qui appartiennent à un aggregate. L’éviter : l’aggregate gère ses propres parties et les cache au reste du code.

Exceptions ​

  • Un bounded context déclaré transaction-script (CTX-14). Un repository n’y sert à rien : ses scripts utilisent Prisma directement (TXS-06).
  • Plusieurs types d’une même hiérarchie peuvent partager un repository (REP-15).

Correction ​

Un repository par aggregate root. Les parties sont chargées et enregistrées avec l’aggregate root.

Voir aussi ​

AGG-02 : les parties ne changent qu’à travers l’aggregate root.