En travaillant sur le livre "Implementing Domain Driven Design" de Vaughn Vernon, je suis incapable de bien comprendre ce qu'est un contexte délimité.
Le livre définit un contexte délimité comme "une frontière conceptuelle dans laquelle un modèle de domaine est applicable. Il fournit un langage omniprésent qui est parlé par l'équipe et exprimé dans son modèle logiciel soigneusement conçu" (la section "Guide de préparation de ce livre"). Cette définition donnerait l’impression qu’un contexte délimité est le modèle et le langage d’un sous-domaine, où ce sous-domaine peut devenir le domaine principal (ce qui semble devoir être qualifié de "sous-domaine principal", mais une autre discussion ...). Cela laisse encore une certaine ambiguïté quant à ce qu'un contexte délimité fournit. Est-ce un groupe d'un ou plusieurs sous-domaines? Si un seul sous-domaine correspond à un contexte lié, que nous dit réellement le contexte lié?
Le chapitre 3 du même livre, cependant, fait référence aux techniques d'intégration entre des contextes liés. Cela semblerait toutefois impliquer que les contextes délimités sont en réalité des systèmes logiciels ou des artefacts de différentes variétés.
Martin Fowler discute brièvement de l’idée d’un contexte délimité ( http://martinfowler.com/bliki/BoundedContext.html ), mais ne clarifie pas vraiment la question.
En fin de compte, qu'est - ce qu'un contexte délimité? Est-ce un groupe de sous-domaines? Le modèle et le langage pour un sous-domaine? La mise en place d'un sous-domaine? Sans ces réponses, il semble assez difficile de comprendre comment décomposer un espace de problème réel dans des contextes limités.
la source
Réponses:
Les contextes et les sous-domaines liés existent à différents niveaux.
Un sous- domaine est une partie de l'espace du problème, c'est une partition naturelle du système, reflétant souvent la structure de l'organisation. Ainsi, la logistique et les opérations peuvent être séparées de la facturation . Eric différencie les sous-domaines de base , de support et génériques en fonction de leur pertinence commerciale dans le scénario donné.
Les contextes font partie de l'espace des solutions. Ils sont des modèles . Ce serait une bonne chose de les avoir, de refléter le partitionnement des domaines-sous-domaines ... mais la vie n’est pas toujours aussi facile. Et vous avez peut-être hérité d'un domaine hérité englobant tout ou plus de contexte dans le même sous-domaine (c'est-à-dire une ancienne application héritée que l'application de remplacement est en train de créer).
Pour avoir un contexte borné, vous devez avoir un modèle et une limite explicite autour de celui-ci. Exactement ce qui manque dans de nombreuses applications basées sur les données qui utilisent des bases de données pour partager des données.
Une autre façon - orthogonale - de voir cela peut être la suivante. La langue omniprésente , la condition particulière dans laquelle chaque terme a une définition unique et non ambiguë, n’a pas d’échelle. Plus vous l'agrandissez, plus l'ambiguïté s'infiltre. Si vous voulez réaliser des modèles précis et non ambigus, vous devez expliciter leurs frontières et parler de nombreux petits langages ubiquitaires, chacun dans un même contexte délimité, avec un objectif bien défini. .
la source
Les techniques de conception dirigée par domaine nous aident à créer des modèles du monde dans lequel nous vivons. Ces modèles existent en tant qu'idées dans l'esprit des personnes impliquées dans un projet.
Comme la télépathie en est encore à ses balbutiements, ces idées sont communiquées entre personnes à l'aide de mots et de phrases.
Les mots et les phrases peuvent être ambigus dans le meilleur des cas. Pour nous aider à réduire les ambiguïtés, nous utilisons le terme «contexte» pour clarifier leur signification.
Quand les gens se plongent profondément dans un projet de logiciel qui s'étend sur plusieurs années, ils semblent oublier le contexte dans lequel sont venues les idées qui se sont transformées en mots et qui se sont transformées en noms de variables qui ont été intégrés au code.
Les débutants arrivent au projet et commencent à utiliser et à utiliser son langage. Ce sont peut-être des utilisateurs, peut-être des développeurs. Si aucun contexte ne leur est fourni, ils créeront leur propre contexte (et donc leur signification) à partir de leur propre expérience de vie.
Ce contexte nouvellement appliqué guidera la manière dont les nouveaux développeurs refacturent ou développent le code. S'ils appliquaient le mauvais contexte, ils refactureraient et développeraient le code, peut-être même légèrement, dans la mauvaise direction. De mauvaises directions, même légères, peuvent causer des problèmes beaucoup plus graves sur toute la ligne.
Selon moi, un "contexte délimité" est simplement un "contexte clarifié" qui est transmis aux débutants du projet afin qu'ils n'appliquent pas leur propre contexte arbitraire pour altérer notre modèle, magnifiquement élaboré.
Il est une reconnaissance explicite, par l'équipe, qui
this phrase
, authis part of the project
moyen exactementthis thing
(et non, comme vous pourriez bien penser,that thing
).C'est une bonne idée de marquer les limites entre votre jardin et celui de votre voisin. Vous spécifiez la limite de manière explicite pour que vous ne soyez pas en colère quand ils commencent à creuser un lit de fleurs sur votre pelouse parfaitement entretenue.
C'est ça. C'est une idée très simple qui est tellement importante que beaucoup a été écrit à ce sujet.
Donc oui. Un contexte délimité est littéralement une frontière, une "clôture", qui distingue le contexte d'un sous-domaine du contexte d'un autre sous-domaine d'un projet.
Le modèle et le langage d'un sous-domaine sont isolés des autres modèles et langages pour éviter les ambiguïtés de sens.
Mais oui. Le monde n'est pas si simple.
L'équipe et vous-même devez être rigoureux dans le respect du contexte défini. Il est vraiment facile d’être paresseux et de ré-imaginer le contexte dans lequel couper les angles lors de la construction du logiciel.
De plus, les objets interagissent avec d'autres objets et les contextes liés doivent interagir les uns avec les autres. Il existe donc divers modèles pour décrire comment ces interactions se produisent. Voir le livre de Eric Evan intitulé Domain Driven Design, chapitre 14, pour ces différents modèles: noyau partagé, fournisseur client, conformiste, couche anticorruption, chemins distincts, service hôte ouvert, langue publiée.
la source
Fondamentalement, le contexte borné définit certaines limites d'applicabilité tangibles de certains sous-domaines. C'est un domaine abstrait dans lequel un certain sous-domaine a un sens, contrairement aux autres. Cela peut donc être une conversation, une présentation, un projet de code avec des limites physiques définies par l'artefact.
Dans différentes situations, j'utilise trois perspectives différentes, ou métaphores du concept de contexte limité.
Du point de vue de l'exécution, il représente les limites logiques, définies par contrat d'un service où le modèle est implémenté. Le contrat peut être représenté sous la forme de l'API de ce service ou d'un ensemble d'événements qu'il publie et qu'il consomme. Donc, de ce point de vue, le contexte borné n’a rien à voir avec les limites physiques.
Du point de vue d'un expert de domaine, le contexte délimité est un domaine dans lequel certains processus métier sont mis en œuvre, un langage omniprésent est appliqué et certains termes ont un sens clair, tandis que d'autres ne le sont pas. Donc, ce n’est qu’un rectangle dessiné sur une feuille de papier ou un tableau blanc.
Pour un développeur de logiciel, c'est-à-dire du point de vue du code statique, un contexte délimité représente une façon dont j'ai conçu mes modèles autour de sous-domaines correspondants. Avec combien de bases de code un sous-domaine spécifique est-il implémenté? De quels concepts sont-ils composés? Quels concepts sont applicables dans chacun d'eux? C'est pourquoi on dit que les contextes liés appartiennent à un espace Solution.
J'aime beaucoup cet exemple du concept de contexte borné.
Une autre question importante (sinon la plus importante) est de savoir comment identifier les contextes liés . Si vous ne le faites pas correctement, vous obtiendrez des services bavards, incontrôlables et étroitement couplés , également appelés monolithes distribués .
la source