ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

Bounded Context

Le pattern stratégique fondateur du DDD : un modèle est cohérent à l'intérieur d'une frontière, et incohérent dès qu'on la franchit sans traduction.

Problème

Dans un grand hub EDI, le mot « commande » n'a pas le même sens selon qui parle. Pour les acheteurs, c'est un PurchaseOrder avec un état « ouvert / approuvé / livré » et porte la promesse d'achat. Pour la finance, c'est une obligation contractuelle qui génère une Invoice. Pour la logistique, c'est un Despatch avec des dates de livraison. Quand on tente de modéliser « la commande » en un schéma JSON global qui réunit tout, chaque équipe se bat pour imposer ses champs : 60 attributs, 30 enums conflictuels, une équipe paralysée à chaque modification.

Forces

  • Le langage métier diverge entre équipes. Une « commande approuvée » signifie validée par l'acheteur (achats), mais comptabilisée comme engagement (finance), mais expédiable (logistique).
  • Les cycles de release diffèrent. Achats livre mensuellement, finance trimestriellement, logistique en continu. Un modèle commun bloque tout le monde.
  • Les contraintes externes diffèrent. Achats négocie avec les fournisseurs, finance respecte la norme comptable, logistique optimise la flotte.
  • Un modèle universel n'existe pas. Tenter de construire unmodèle unifié finit par produire un objet vide de sens : chaque équipe ignore les attributs des autres.

Solution

Identifier les contextes bornés du domaine, leur donner un nom explicite (Achats, Facturation, Logistique, Audit), et définir pour chacun son propre modèle métier — son ubiquitous language. Aux frontières entre contextes, on instaure un Context Map : traducteurs explicites (Anti-Corruption Layer), partages négociés (Shared Kernel), relations conformistes ou customer-supplier. Chaque équipe propriétaire d'un contexte évolue son modèle à sa cadence.

┌────────────────────────────┐         ┌────────────────────────────┐
│ Contexte Achats (Purchase) │         │ Contexte Facturation       │
│ ──────────────────────────  │         │ ──────────────────────────  │
│ PurchaseOrder              │ ──ACL──▶│ Invoice                    │
│   poNumber : "PO-12345"    │ Trans-  │   invoiceNumber : "INV-99" │
│   buyerId, supplierId      │ lator   │   debtor, creditor         │
│   deliveryDate             │         │   paymentTerms             │
│   "ouvert", "approuvé"     │         │   "à émettre", "envoyée"   │
│                            │         │   "payée"                  │
└────────────────────────────┘         └────────────────────────────┘
   ORDERS EDIFACT D.96A                    INVOIC EDIFACT D.96A

Implémentation EDI

Cas concret : un hub EDI hospitalier sépare le contexte « Patient Administration » (HL7 ADT, qui définit « patient » comme une identité administrative avec adresse, couverture sociale, prochain de parenté) du contexte « Clinical Orders » (HL7 ORM, qui définit « patient » comme un sujet d'examen avec poids, allergies, prescriptions actives). Les deux contextes ne partagent qu'un identifiant pivot (MRN). Un Anti-Corruption Layer (translator) traduit ADT^A08 vers les modèles nécessaires en Clinical Orders. Pareil côté retail : ORDERS EDIFACT (contexte achats) ≠ ASN/DESADV (contexte logistique) ≠ INVOIC (contexte facturation). Chaque contexte a son équipe, ses règles de validation, son partnerId mapping. Le hub EDI est l'infrastructure du Context Map.

Anti-patterns

  • Big Ball of Mud. Un seul modèle plat partagé entre toutes les équipes : chaque changement casse les autres, personne n'est responsable.
  • Contextes calqués sur l'organigramme. Les contextes doivent suivre la cohérence métier, pas l'organisation RH. Sinon, la frontière bouge à chaque réorg.
  • Contextes sans frontière explicite. Si on ne sait pas où finit « Facturation » et où commence « Achats », les concepts fuient (commande qui devient facture sans traduction).

Patterns liés

  • Anti-Corruption Layer — le traducteur défensif aux frontières de contexte.
  • Ubiquitous Language — la langue partagée à l'intérieur d'un contexte.
  • Aggregate — la frontière de cohérence transactionnelle à l'intérieur d'un contexte.
  • Modèle canonique — la traduction technique entre contextes/partenaires.
  • Data Mesh — la généralisation Dehghani du Bounded Context au monde data.

Sources

  • Evans E.Domain-Driven Design: Tackling Complexity in the Heart of Software, Addison-Wesley 2003. Chap. 14 « Maintaining Model Integrity » — la définition originale du Bounded Context.
  • Vernon V.Implementing Domain-Driven Design, Addison-Wesley 2013. Chap. 2 et 3 développent la stratégie de découpage en contextes. informit.com — Implementing DDD
  • Fowler M.BoundedContext (martinfowler.com 2014). La synthèse pédagogique du pattern. martinfowler.com — BoundedContext
  • Plotkin H. — Context Mapping. Le compagnon visuel du Bounded Context. github.com/ddd-crew/context-mapping