BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités L'utilisation des Bounded Contexts de Domain Driven Design pour découper un modèle de domaine vaste

L'utilisation des Bounded Contexts de Domain Driven Design pour découper un modèle de domaine vaste

Favoris

Pour diviser un modèle de domaine trop vaste en plusieurs modèles plus petits, les développeurs peuvent appliquer le concept de Bounded Context (Contexte Borné) proposé par Domain Driven Design (DDD) en utilisant le Contexte de Base de données (DbContext class) disponible dans Entity Framework (EF), ce que expliquait récemment Julie Lerman dans le magazine MSDN.

Evoluer d'un modèle unique comprenant beaucoup de classes vers plusieurs modèles plus petits présente des bénéfices, selon Julie, MVP Microsoft depuis 2003, qui travaille comme consultante et mentor sur la plateforme .Net. Les Bounded Contexts créent des modèles plus petits avec une meilleure cohésion et avec des frontières entre chaque modèle. L'article de Julie note néanmoins que les Bounded Contexts de DDD sont un concept qui dépasse largement l'usage du DbContext d'Entity Framework, et par conséquent l'implémentation qu'elle propose est «Contrainte» ou «Orientée», selon ses propres termes.

En séparant les classes selon différents contextes, par exemple en séparant celles qui s'occupent des clients de celles dédiées aux commandes et aux expéditions, et en les mettant dans des DbContexts séparés, Julie découpe un vaste contexte contenant toutes les classes de l'application en plusieurs contextes plus petits et plus spécifiques. Cela permet de conserver le même modèle de données sous-jacent et les mêmes tables en base de données.

Lorsque certains attributs d'une classe ne sont pas nécessaires au sein d'un contexte, une classe plus petite et plus ciblée peut être créée, qui ne reprend que certaines partie de la classe originale et donc indirectement certaines parties des tables sous-jacentes en base de données. Cela s'effectue en utilisant des vues en base de données. Une restriction pour ces classes est qu'elles ne peuvent pas être utilisées pour des insertions dans la base de données lorsqu'il existe des colonnes non-annulables hors du contrôle de la classe. Le DbContext va lever une exception en réponse à toute tentative d'insertion dans ce cas.

La mise en place de la base de données avec la création automatique de toutes les tables, «Code First», nécessite un travail supplémentaire avec un «über-modèle» séparé et un DbContext contenant toutes les classes. Ce contexte complet est ensuite utilisé pour initialiser la base de données.

Eric Evans, l'auteur du livre original DDD, a réagi positivement dans un tweet, mais d'autres émettent des réserves sur l'application des Bounded Contexts de cette manière et offrent des alternatives. Une réaction est que cela viole le concept, en citant la communauté DDD définition:

"Définissez explicitement le contexte dans lequel un modèle s'applique. Fixez explicitement des limites en termes d'organisation de l'équipe, de l'utilisation dans certaines parties spécifiques de l'application, et des représentations physiques telles que les bases de code et les schémas de base de données. Gardez le modèle strictement cohérent à l'intérieur de ces frontières (les bornes de chaque contexte), mais ne soyez pas distraits ou confus par des problèmes extérieurs".

Entity Framework est le framework de mapping object-relationnel de Microsoft pour la plateforme .NET.

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Commentaires de la Communauté

  • Mauvais usage des contextes

    by Erik Gollot,

    Ce message a été marqué comme possible SPAM. Un modérateur le relira et le publiera sans notification dans les 24 heures. Merci.

    Le soucis dans ce billet et bien d'autres est l'utilisation des contextes pas très claire. On ne dit pas justement dans quel contexte on parle de...contexte.
    Quand on modélise une application, on est dans un seul contexte, celui de l'application. Donc je ne vois pas pourquoi on parlerai des contextes par équipe. Il ne s'agit pas de découper des "gros" modèles mais bien de définir un ou des langages dans un SI. S'il y a des domaines métier sans adhérence alors on a des contextes sinon on n'en a qu'un. Les contextes ne sont pad fait pour découper.

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

BT