web-dev-qa-db-fra.com

Qu'est-ce que la conception axée sur le domaine?

Quelqu'un peut-il s'il vous plaît expliquer (en termes succincts) ce qu'est exactement la conception dirigée par domaine? Je vois beaucoup le terme mais je ne comprends vraiment pas ce que c'est ou à quoi il ressemble. En quoi diffère-t-il de la conception non pilotée par domaine?

En outre, quelqu'un peut-il expliquer ce qu'est un objet de domaine? Comment le domaine diffère-t-il des objets normaux?

150
Calanus

MODIFIER:

Comme cela semble être un excellent résultat sur Google et que ma réponse ci-dessous ne l'est pas, veuillez vous référer à cette réponse bien meilleure:

https://stackoverflow.com/a/1222488/1240557

ANCIENNE REPONSE (pas si complète :))

Pour créer un bon logiciel, vous devez savoir ce qu’est ce logiciel est tout au sujet. Vous ne pouvez pas créer de logiciel bancaire sauf si avoir une bonne compréhension de ce qu'est la banque, il faut comprendre le domaine bancaire.

De: Conception axée sur le domaine par Eric Evans.

Ce livre décrit très bien DDD.

Inscrivez-vous pour télécharger un résumé du livre ou téléchargez directement le résumé .

88
Mikael Östberg

Domain Driven Design est une méthodologie et une procédure préconisées pour le développement de systèmes complexes axés sur la cartographie d'activités, de tâches, d'événements et de données d'un domaine problématique aux artefacts technologiques d'un domaine de solutions.

La conception axée sur le domaine met l'accent sur la compréhension du domaine du problème afin de créer un modèle abstrait du domaine du problème pouvant ensuite être mis en œuvre dans un ensemble particulier de technologies. Domain Driven Design en tant que méthodologie fournit des indications sur la manière dont le développement de modèle et le développement de technologie peuvent aboutir à un système qui répond aux besoins de ceux qui l'utilisent tout en restant robuste face aux changements dans le domaine problématique.

Le côté processus de la conception dirigée par le domaine implique la collaboration entre experts du domaine, des personnes connaissant le domaine problématique et des experts en conception/architecture, des personnes connaissant le domaine de la solution. L'idée est de disposer d'un modèle partagé avec un langage partagé de sorte que, lorsque des personnes appartenant à ces deux domaines différents avec leurs deux perspectives différentes discutent de la solution, elles discutent réellement d'une base de connaissances partagée avec des concepts partagés.

L'absence d'une compréhension partagée du domaine problématique entre les personnes ayant besoin d'un système particulier et les personnes chargées de la conception et de la mise en œuvre du système semble constituer un obstacle majeur à la réussite des projets. Domain Driven Design est une méthodologie pour remédier à cet obstacle.

C'est plus que d'avoir un modèle objet. L'accent est vraiment mis sur la communication partagée et l'amélioration de la collaboration afin que les besoins réels dans le domaine du problème puissent être découverts et qu'une solution appropriée soit créée pour répondre à ces besoins.

La conception axée sur le domaine: le bon et le stimulant fournit un bref aperçu de ce commentaire:

DDD aide à découvrir l’architecture de niveau supérieur et à informer sur le Mécanique et dynamique du domaine dont le logiciel a besoin pour reproduire. Concrètement, cela signifie qu’une analyse DDD bien faite minimise les malentendus entre les experts de domaine et les logiciels architectes, et cela réduit le nombre de demandes coûteuses pour changer. En divisant la complexité du domaine dans des contextes plus petits, DDD évite de forcer les architectes de projet à concevoir un objet gonflé modèle, qui est où beaucoup de temps est perdu à travailler détails de la mise en œuvre - en partie parce que le nombre d'entités à traiter dépasse souvent la taille des tableaux blancs dans les salles de conférence.

Voir également cet article Architecture axée sur le domaine pour la conception de services qui fournit un exemple court. L'article fournit la description miniature suivante de la conception dirigée par le domaine.

Domain Driven Design préconise une modélisation basée sur la réalité de affaires pertinentes pour nos cas d'utilisation. Comme il vieillit et niveau de battage décroissant, beaucoup d’entre nous oublient que l’approche DDD est vraiment aide à comprendre le problème et à concevoir un logiciel vers la compréhension commune de la solution. Lors de la création d'applications, DDD parle de problèmes en tant que domaines et sous-domaines. Il decrit étapes indépendantes/zones de problèmes en tant que contextes délimités, souligne a langage commun pour parler de ces problèmes, et ajoute de nombreuses techniques des concepts, tels que des entités, des objets de valeur et des règles de racine agrégées en soutenir la mise en œuvre.

Martin Fowler a écrit un certain nombre d'articles dans lesquels la méthodologie de conception par domaine est mentionnée. Par exemple, cet article, BoundedContext , fournit une vue d'ensemble du concept de contexte lié issu de Domain Driven Development.

Dans ces jours plus jeunes, il nous a été conseillé de construire un modèle unifié du toute l’entreprise, mais DDD reconnaît que nous avons appris que "l’unification totale du modèle de domaine pour un grand système ne sera pas réalisable ou rentable" 1 . Donc, au lieu de cela, DDD divise un grand système en contextes bornés, chacun pouvant avoir un modèle unifié - essentiellement une manière de structurer MultipleCanonicalModels.

34
Richard Chambers

Voici un autre bon article que vous pouvez consulter sur Domain Driven Design . si votre demande est quelque chose de sérieux que l'affectation au collège. Le principe de base est de tout structurer autour de vos entités et d’avoir un modèle de domaine fort. Faites la distinction entre les services qui fournissent des éléments liés à l’infrastructure (tels que l’envoi de courrier électronique, la persistance de données) et les services qui répondent aux besoins essentiels de votre activité.

J'espère que cela pourra aider.

10
Nilesh

Vous CAN ONLY comprenez la conception pilotée par le domaine en comprenant d’abord ce que sont:

Qu'est-ce qu'un domaine?

Le champ pour lequel un système est construit. Gestion d’aéroport, vente d’assurances, cafés, vol en orbite, c’est tout.

Il n'est pas rare qu'une application couvre plusieurs domaines différents. Par exemple, un système de vente au détail en ligne peut fonctionner dans les domaines d'expédition (choisir les méthodes de livraison appropriées, en fonction des articles et de la destination), des prix (y compris les promotions et des prix spécifiques à l'utilisateur, par exemple, par emplacement), et des recommandations produits par l'historique des achats).

Qu'est-ce qu'un modèle?

"Une approximation utile du problème à résoudre." - Gerry Sussman

Une classe d'employés n'est pas un véritable employé. Il modélise un vrai employé. Nous savons que le modèle ne capture pas tout sur les vrais employés, et ce n’est pas le but. Il s'agit uniquement de capturer ce qui nous intéresse dans le contexte actuel.

Différents domaines peuvent être intéressés de différentes manières pour modéliser la même chose. Par exemple, le service des salaires et le service des ressources humaines peuvent modéliser les employés de différentes manières.

Qu'est-ce qu'un modèle de domaine?

Un modèle pour un domaine.

Qu'est-ce que la conception par domaine (DDD)?

C'est une approche de développement qui valorise profondément le modèle de domaine et le connecte à la mise en œuvre. DDD a été inventé et développé initialement par Eric Evans.

Culled from here

10
Edwin Ikechukwu

DDD (Domain Driven Design) est un concept utile pour analyser les exigences d'un projet et gérer la complexité de ces exigences.Avant que les gens analysaient ces exigences en considérant les relations entre classes et tables, leur conception était basée sur des tables de base de données relations ce n'est pas vieux mais il a quelques problèmes:

  • Dans les grands projets aux exigences complexes, cela n’est pas utile, même si c’est un excellent moyen de concevoir des projets de petite taille.

  • lorsque vous avez affaire à aucune personne technique qui n’a pas de concept technique, ce conflit peut causer d’énormes problèmes dans notre projet.

Donc, DDD a résolu le premier problème en considérant le projet principal comme un domaine et en divisant chaque partie de ce projet en petites parties qui sont connues de Bounded Context et qui n’ont aucune influence sur les autres. Et le deuxième problème a été résolu avec un langage omniprésent qui est un langage commun entre les membres de l'équipe technique et les propriétaires de produits qui ne sont pas techniques mais ont une connaissance suffisante de leurs exigences.

Généralement, la définition simple de Domain est le projet principal qui rapporte de l'argent aux propriétaires et aux autres équipes.

1
sajadre

Je crois que le pdf suivant vous donnera une image plus grande. Conception axée sur le domaine par Eric Evans

REMARQUE: Pensez à un projet sur lequel vous pouvez travailler, appliquez les petites choses que vous avez comprises et visualisez les meilleures pratiques. Cela vous aidera également à développer votre capacité à adopter l'approche de conception d'architecture de micro-services.

0
Hedego

Comme dans TDD & BDD, votre équipe/votre groupe se concentre plus sur le test et le comportement du système que sur l’implémentation de code.

De la même manière, lorsque l’analyste système, le propriétaire du produit, l’équipe de développement et bien sûr le code - entités/classes, variables, fonctions, interfaces utilisateur, les processus communiquent en utilisant le même langage, appelé Domaine

DDD est un processus de pensée. Lorsque vous modélisez une conception de logiciel, vous devez garder le domaine/le processus métier au centre de l’attention plutôt que les structures de données, les flux de données, la technologie, les dépendances internes et externes.

Il y a beaucoup d'approches pour modéliser systerm en utilisant DDD 

  • la recherche d'événement (en utilisant les événements comme source unique de vérité)
  • bases de données relationnelles
  • bases de données graphiques
  • en utilisant des langages fonctionnels

Objet de domaine:

En termes très naïfs, un objet qui

  • a un nom basé sur le processus/flux de l'entreprise 
  • a le contrôle complet de son état interne, c'est-à-dire qu'il expose des méthodes pour manipuler cet état.
  • remplissez toujours tous les invariants/règles commerciales dans le contexte de son utilisation.
  • suit le principe de responsabilité unique 
0
Nitin babariya