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

ENT-08 · L’id technique de persistance reste caché ​

Style
Tactique
Sévérité
mineure
S’applique à
  • Modèle (domain)
  • Adapters driven
  • Schéma et migrations

Signal ​

Un id technique (clé primaire numérique, id imposé par l’ORM) visible dans le modèle, utilisé par le code métier, ou exposé dans une API ou un event, à côté de l’identité du domaine ou à sa place.

Pourquoi ​

Quand l’ORM impose son propre id, on se retrouve avec deux identités. L’id technique ne fait pas partie du modèle. Le montrer fait fuir un détail de persistance dans le modèle.

Le cacher dans une classe de base, en protected. Ajouter en base une contrainte d’unicité sur l’identité du domaine.

Exceptions ​

Une table héritée, déjà indexée sur une clé numérique, dont on ne contrôle pas le schéma. L’id technique reste alors dans driven, documenté par un waiver.

Correction ​

Cacher l’id technique dans la couche de persistance (driven), et n’exposer que l’identité du domaine.

Adaptation ​

Avec un repository écrit à la main, le plus simple est souvent de prendre l’identité du domaine comme clé primaire, sans id technique. L’id technique n’existe que pour satisfaire l’ORM.

Notre choix : l’identité du domaine, un UUIDv7, est la clé primaire (type uuid de PostgreSQL). Pas d’id technique.

Voir aussi ​

AGG-05 sépare déjà l’identité de l’aggregate root de tout id technique.