Bounded contexts
Un bounded context donne à chaque terme un sens précis. Ces règles vérifient que le code respecte cette frontière :
- un langage par bounded context ;
- aucun concept étranger dans le modèle ;
- une traduction à chaque entrée ;
- une taille fixée par le langage ;
- un style d’implémentation qui suit la complexité du domaine.
Elles s’appuient sur la context map : avant de juger un dossier, il faut savoir à quel bounded context il appartient. C’est pourquoi plusieurs d’entre elles concluent par une question plutôt que par un défaut.
En pratique
Dans les services d’un établissement de paiement, les mêmes mots changent de sens d’un bounded context à l’autre :
| Terme | Dans Customer | Dans Ledger |
|---|---|---|
| Compte | La relation avec un client : qui il est, comment le joindre | Une ligne des livres comptables, débitée et créditée, avec un solde |
| Clôturer un compte | Mettre fin à la relation | Refuser toute nouvelle écriture sur cette ligne |
Chaque bounded context garde son propre modèle, et déclare comment il est construit :
json
{
"contexts": {
"payment": "tactical",
"ledger": "tactical",
"customer": "transaction-script",
"safeguarding": "transaction-script",
"compliance": "tactical"
}
}- Un langage par bounded context : aucun n’emprunte le modèle de compte de l’autre (CTX-01, CTX-07).
- L’effort de modélisation suit la complexité de chaque bounded context (CTX-13), et ce choix est déclaré (CTX-14).
Règles
Langage et frontière
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| CTX-01 | Un langage par bounded context, pas de modèle universel | majeure | |
| CTX-02 | Un terme a un seul sens dans le bounded context | question | |
| CTX-03 | Le code suit le glossaire du bounded context | majeure | |
| CTX-04 | Aucun concept d’un autre subdomain dans le modèle | majeure | |
| CTX-05 | À la frontière, traduire en un concept local | majeure | |
| CTX-06 | Un système externe est un autre bounded context | majeure | fitness |
Homonymes entre bounded contexts
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| CTX-07 | Chaque bounded context a son propre modèle d’un concept partagé | majeure | |
| CTX-08 | Pas de préfixe juste pour éviter un conflit avec un autre bounded context | mineure |
Ce que contient un bounded context
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| CTX-09 | Le schéma de la base parle le langage du modèle | mineure | |
| CTX-10 | Les composants autour du modèle délèguent | majeure |
Taille et organisation
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| CTX-11 | La taille d’un bounded context suit le langage | question | |
| CTX-12 | Une équipe par bounded context | majeure | |
| CTX-15 | Un module avant un bounded context | question |
Style d’implémentation
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| CTX-13 | L’investissement tactique suit la complexité du domaine | question | |
| CTX-14 | Chaque bounded context déclare son style d’implémentation | majeure | fitness |
| CTX-16 | Chaque choix d’architecture répond à un risque réel | bloquante |