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.