Aller au contenu
Filtrer les règles par style d’implémentation
Style
Tactique
Sévérité
majeureMajeure si la croissance n’est pas bornée. Question sinon.
S’applique à
  • Modèle (domain)

AGG-12 · Aucune collection non bornée dans un aggregate ​

Style
Tactique
Sévérité
majeureMajeure si la croissance n’est pas bornée. Question sinon.
S’applique à
  • Modèle (domain)

Signal ​

  • Une collection qui grandit avec le temps ou l’usage, sans limite métier (historique, mouvements, journal, commentaires).
  • Une command qui charge toute la collection pour y ajouter un élément.
  • Un gros attribut rarement lu, chargé à chaque command.

Pourquoi ​

Une cardinalité « 0..* » n’est presque jamais nulle, et elle ne fait que croître. On finit par charger des milliers d’objets pour une opération triviale, et chaque ajout entre en conflit avec les autres.

Exceptions ​

Une collection plafonnée par une règle métier, ou dont la taille réaliste estimée reste petite. Un aggregate de quelques dizaines d’objets chargés reste acceptable.

Correction ​

Pour chaque nouvelle collection, demander une estimation rapide :

  • la taille maximale réaliste ;
  • le nombre d’objets chargés par command ;
  • si deux utilisateurs travaillent en même temps sur la même instance.

Si la croissance n’est pas bornée, sortir l’élément dans son propre aggregate, référencé par son identité. Pour un gros attribut rarement lu, un aggregate séparé : le repository charge des aggregates entiers (REP-02), sans lazy loading.