Aller au contenu
Filtrer les règles par style d’implémentation
Partie 1 · Conception stratégique

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 :

Context map de l’exemple, dessinée par Context Mapper

RelationCe qu’elle signifie
Ledger → PaymentPayment demande au Ledger de passer les écritures de ses paiements, par l’open host service du Ledger, et traduit ses réponses.
Customer → PaymentPayment a besoin de connaître le client qui paie.
Compliance → PaymentPayment demande si un paiement peut partir.
CSM → PaymentLe CSM impose son format de message, et Payment le traduit en un seul endroit.
Customer → ComplianceCompliance utilise les données client telles que Customer les publie.
Ledger → SafeguardingSafeguarding 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

CodeRègleSévéritéDétection
MAP-01Le code met en œuvre la relation déclarée dans la context map majeure
MAP-02Pas de base de données partagée entre bounded contexts majeure

Relations particulières

CodeRègleSévéritéDétection
MAP-03Un shared kernel reste petit et change avec les deux équipes majeure
MAP-04Un big ball of mud reste contenu majeure