Context maps
Une context map indique, pour chaque paire de bounded contexts, lequel est upstream, lequel est downstream, et le pattern de chaque côté : anticorruption layer, open host service, published language, conformist, shared kernel… Ces règles vérifient que le code suit ce que la context map déclare, et gardent les relations particulières sous contrôle. Voir mettre en place un projet.
La construction de chaque pattern est le sujet de la partie intégration : contrats, traduction, messages et appels distants.
En pratique
La context map des services d’un établissement de paiement, écrite en CML :
txt
ContextMap PaymentServices {
type = SYSTEM_LANDSCAPE
state = TO_BE
contains Customer, Payment, Ledger, Safeguarding, Compliance, CSM
Customer [U,OHS,PL]->[D,ACL] Payment : Debtors
Compliance [U,OHS,PL]->[D,ACL] Payment : Screening
Customer [U,OHS,PL]->[D,CF] Compliance : KnowYourCustomer
CSM [U,PL]->[D,ACL] Payment : Clearing
Ledger [U,OHS,PL]->[D,ACL] Payment : Bookings
Ledger [U,OHS,PL]->[D,CF] Safeguarding : Balances
}
Domain PaymentServices {
Subdomain CreditTransfers {
type = CORE_DOMAIN
}
Subdomain Bookkeeping {
type = CORE_DOMAIN
}
Subdomain CustomerRelationship {
type = SUPPORTING_DOMAIN
}
Subdomain FundsSafeguarding {
type = SUPPORTING_DOMAIN
}
Subdomain AntiMoneyLaundering {
type = CORE_DOMAIN
}
Subdomain Clearing {
type = GENERIC_SUBDOMAIN
}
}
BoundedContext Customer implements CustomerRelationship
BoundedContext Payment implements CreditTransfers
BoundedContext Ledger implements Bookkeeping
BoundedContext Safeguarding implements FundsSafeguarding
BoundedContext Compliance implements AntiMoneyLaundering
BoundedContext CSM implements Clearing {
type = SYSTEM
}Context Mapper la valide et la dessine :
| Relation | Ce qu’elle signifie |
|---|---|
| Ledger → Payment | Payment demande au Ledger de passer les écritures de ses paiements, par l’open host service du Ledger, et traduit ses réponses. |
| Customer → Payment | Payment a besoin de connaître le client qui paie. |
| Compliance → Payment | Payment demande si un paiement peut partir. |
| CSM → Payment | Le CSM impose son format de message, et Payment le traduit en un seul endroit. |
| Customer → Compliance | Compliance utilise les données client telles que Customer les publie. |
| Ledger → Safeguarding | Safeguarding utilise les soldes tels que le Ledger les publie. |
- Le code met en œuvre ces relations, et aucune autre (MAP-01).
- Aucune table n’est partagée : chaque bounded context ne lit et n’écrit que les siennes (MAP-02).
Règles
La context map et le code
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| MAP-01 | Le code met en œuvre la relation déclarée dans la context map | majeure | |
| MAP-02 | Pas de base de données partagée entre bounded contexts | majeure |
Relations particulières
| Code | Règle | Sévérité | Détection |
|---|---|---|---|
| MAP-03 | Un shared kernel reste petit et change avec les deux équipes | majeure | |
| MAP-04 | Un big ball of mud reste contenu | majeure |