Mathieu Eveillard

Bounded contexts 101

Bounded contexts 101

Je le dis et le répète à qui veut l’entendre : la modularité est la qualité première que vous devez travailler pour être en mesure de faire évoluer votre système d’information sur le long terme. Et, par chance, c’est un sujet avant tout fonctionnel, sur lequel les CEO ont prise, un sujet sur lequel ils doivent se pencher tant il concerne le cœur de métier de l’entreprise !

Modulariser un système d’information, c’est tracer les contours de ses Bounded Contexts, notion centrale du Domain-Driven Design. Pour une raison que j’ignore, elle demeure abstraite aux yeux de beaucoup d’entre nous, au point de faire peur. Dommage, car, avec l’habitude, vous verrez que ce n’est pas si compliqué.

L’intuition : une maison et une cave

Prenez l’exemple d’une maison ayant une cave : si vous descendez trop souvent à la cave, disons tous les jours, c’est le signe que quelque chose s’y trouve qui ne devrait pas s’y trouver (1). Pourquoi ? Parce qu’il y a le lieu de vie d’une part, et le lieu d’entreposage, d’autre part. Ce qui revient à dire que nous avons ici deux contextes définis par la fréquence d’accès aux objets : le « chaud » et le « froid ».

Cet exemple, aussi simple soit-il, dit encore 2 choses importantes :

Tout l’objet du Domain-Driven Design stratégique est de découper un grand système en sous-systèmes aussi petits que possible, les bounded contexts. Ce sont des zones de cohésion forte couplées faiblement les unes aux autres, chacune étant centrée sur une responsabilité unique.

Mais comment, concrètement, identifier les contextes d’un système donné ?

Une approximation pour éviter 2 erreurs courantes

En première approximation, un bounded context peut être assimilé à un module fonctionnel. Les deux ne sont pas rigoureusement identiques, le premier allant plus loin dans le découpage que le second, mais cette approximation aide vraiment à la compréhension.

Cette approximation est importante parce qu’elle dit l’essentiel, à savoir que ce découpage est basé sur des considérations bien plus liées au métier qu’à la technique. Elle permet surtout d’éviter 2 erreurs fréquentes :

Identification des contextes : penser « verbes d’action »

Creusons un peu l’exemple précédent :

Ainsi, pour une même facture, ce sont 2 finalités distinctes, des verbes d’action distincts (facturer et recouvrer) et en fait des vocabulaires distincts, qui signent 2 bounded contexts. Un bounded context est une zone où un terme du langage possède un sens unique, définition d’Eric Evans, père du DDD.

On pourrait en dire bien plus sur le sujet, mais ces quelques lignes sont finalement assez représentatives des raisonnements à l’œuvre lorsqu’on modularise un système. Si vous ne devez retenir qu’une chose : ne pas découper par entité mais par action (ce que l’on fait avec ces entités).

Ce découplage offre des bénéfices multiples : intelligibilité du système dans son ensemble (chaque contexte travaille dans une relative autonomie), isolation structurelle et résilience (si vos développements occasionnent une régression, le risque est moindre qu’elle se propage aux autres contextes), sans oublier qu’ils vous offrent sur un plateau la définition de vos équipes (loi de Conway inversée, où chaque contexte sera pris en charge par une et une seule équipe).

(1) Dit autrement, il est peut-être temps de remonter votre petite amie de la cave #NataschaKampusch.

← Tous les articles