Retour aux articles
DDD12 février 2026

Les bounded contexts sont une frontière de langage, pas une structure de dossiers

Un dossier nommé Billing à côté d'un dossier nommé Shipping ressemble à deux bounded contexts. Ça n'en est pas un tant que le mot Order ne signifie pas quelque chose de différent dans chacun.

Côté facturation, une commande est une dette : un ensemble de lignes avec un prix, en attente d'être facturée. Côté expédition, la même commande est un ensemble d'objets physiques avec un poids et une destination, en attente d'être emballée. Modélisez les deux avec une seule classe Order partagée dans toute la base de code, et vous obtenez une classe avec un champ weight que la facturation n'utilise jamais et un champ total que l'expédition ne lit jamais - des champs qui existent parce que deux modèles mentaux différents ont été forcés de partager une seule forme.

Le signal

Une frontière de contexte manque quand une classe a des champs, ou des méthodes, qui n'ont de sens que pour une seule équipe lisant le code. Le langage ubiquitaire est ubiquitaire à l'intérieur d'un contexte, pas à travers tous les contextes. Order a le droit de signifier deux choses différentes dans deux contextes différents, volontairement.

Ce qu'est réellement la frontière

Un bounded context n'est ni un package, ni un microservice, ni un schéma de base de données - ce sont des choix d'implémentation que vous pouvez faire plus tard. C'est la frontière à l'intérieur de laquelle un terme a exactement un sens, accepté par les personnes qui l'utilisent. Tracez-la autour d'un vocabulaire partagé, pas autour d'une couche technique.

Le compromis : traverser un bounded context veut dire traduire, pas réutiliser. Une Order qui entre dans le contexte expédition depuis la facturation arrive sous la forme d'une ShippableOrder, construite par une couche anti-corruption, pas transmise telle quelle. C'est une classe et une étape de mapping en plus pour ce qui était auparavant un simple import. Ça vaut le coup dès que deux équipes commencent à se disputer sur ce qu'un champ nommé status est censé signifier.