Was ist in Bezug auf DDD ein begrenzter Kontext?


40

Als ich das Buch "Implementing Domain Driven Design" von Vaughn Vernon durchgearbeitet habe, konnte ich nicht richtig verstehen, was ein begrenzter Kontext eigentlich ist.

Das Buch definiert einen begrenzten Kontext als "eine konzeptionelle Grenze, an der ein Domänenmodell anwendbar ist. Es bietet eine allgegenwärtige Sprache, die vom Team gesprochen und in seinem sorgfältig entworfenen Softwaremodell ausgedrückt wird" (der Abschnitt "Leitfaden für dieses Buch"). Diese Definition würde es so klingen lassen, als ob ein begrenzter Kontext das Modell und die Sprache einer Unterdomäne ist, in der diese Unterdomäne möglicherweise die Kerndomäne ist (was so scheint, als sollte sie als "Kern-Unterdomäne" bezeichnet werden, aber das ist es eine weitere Diskussion ...). Dies lässt immer noch eine gewisse Unklarheit darüber, was ein begrenzter Kontext bietet. Ist es eine Gruppierung von einer oder mehreren Subdomänen? Wenn nur eine Unterdomäne einem begrenzten Kontext entspricht, was sagt uns der begrenzte Kontext tatsächlich?

Kapitel 3 desselben Buches bezieht sich jedoch auf die Integrationstechniken zwischen begrenzten Kontexten. Dies scheint jedoch zu implizieren, dass die begrenzten Kontexte tatsächlich Softwaresysteme oder Artefakte irgendeiner Art sind.

Martin Fowler diskutiert kurz die Idee eines begrenzten Kontexts ( http://martinfowler.com/bliki/BoundedContext.html ), klärt das Problem jedoch nicht wirklich.

Was ist letztendlich ein begrenzter Kontext? Ist es eine Gruppierung von Subdomains? Das Modell und die Sprache für eine Unterdomäne? Die Implementierung einer Subdomain? Ohne diese Antworten scheint es ziemlich schwierig zu sein, einen realen Problemraum in begrenzte Kontexte zu zerlegen.



2
Dieser Beitrag macht die Definition nicht wirklich klar, zumindest für mich. Es wird die Idee von begrenzten Kontexten erörtert, wie sie möglicherweise organisatorisch anwendbar sind, dies wird jedoch nie wirklich auf die Softwareentwicklung zurückgeführt.
Michael

1
OKAY. Nun, obwohl ich kein DDD-Experte bin, fand ich diese Beschreibung von Microsoft hilfreich (im Abschnitt Einführung): msdn.microsoft.com/en-us/library/jj591572.aspx . Es heißt: ...
Robert Harvey

1
Begrenzte Kontexte sind autonome Komponenten mit eigenen Domänenmodellen und einer eigenen allgegenwärtigen Sprache. Sie sollten zur Laufzeit keine Abhängigkeiten voneinander aufweisen und isoliert ausgeführt werden können. Sie sind jedoch Teil desselben Gesamtsystems und müssen Daten miteinander austauschen ...
Robert Harvey

1
... Wenn Sie das CQRS-Muster in einem begrenzten Kontext implementieren, sollten Sie Ereignisse für diese Art der Kommunikation verwenden: Ihr begrenzter Kontext kann auf Ereignisse reagieren, die außerhalb des begrenzten Kontexts ausgelöst werden, und Ihr begrenzter Kontext kann Ereignisse veröffentlichen, die andere betreffen beschränkte Kontexte können abonnieren. Mithilfe von Ereignissen können Sie die lose Kopplung zwischen Ihren begrenzten Kontexten aufrechterhalten.
Robert Harvey

Antworten:


38

Begrenzte Kontexte und Unterdomänen existieren auf verschiedenen Ebenen.

Eine Unterdomäne ist ein Teil des Problembereichs, eine natürliche Aufteilung des Systems, die häufig die Struktur der Organisation widerspiegelt. So könnten Logistik und Betrieb von Fakturierung und Abrechnung getrennt werden . Eric unterscheidet Core- , Support- und generische Subdomains nach ihrer Geschäftsrelevanz im jeweiligen Szenario.

Kontexte sind Teile des Lösungsraums. Sie sind Modelle . Es wäre gut, wenn sie die Aufteilung der Domänen-Subdomänen widerspiegeln würden ... aber das Leben ist nicht immer so einfach. Und Sie haben möglicherweise eine aufgeblähte Legacy-Domain, die alles umfasst, oder mehr Kontext in derselben Subdomäne (dh alte Legacy-App, die die Ersatz-App ist, die jemand erstellt).

Um einen begrenzten Kontext zu haben, benötigen Sie ein Modell und eine explizite Begrenzung. Genau das, was in vielen datengesteuerten Anwendungen fehlt, die Datenbanken zum Teilen von Daten verwenden.

Ein anderer - orthogonaler - Weg, dies zu sehen, könnte der folgende sein. Ubiquitous Language , die spezielle Bedingung, bei der jeder Begriff eine eindeutige Definition hat, ist nicht skalierbar. Je mehr Sie es vergrößern, desto mehr Unklarheiten treten auf. Wenn Sie präzise, ​​eindeutige Modelle erstellen möchten, müssen Sie deren Grenzen deutlich machen und viele kleine, allgegenwärtige Sprachen sprechen, die sich jeweils in einem einzigen begrenzten Kontext befinden und einen genau definierten Zweck haben .


1
In einer idealen Welt würde es also eine 1-zu-1-Beziehung zwischen Subdomänen und begrenzten Kontexten geben? (Natürlich zu verstehen, dass sich das, was ideal und das, was wahr ist, unterscheidet).
Michael

2
Nicht unbedingt: Der Schlüssel ist, dass ein BC, der viele Subdomains überlappt, ein schlechter Geruch ist. Nun ... es ist nicht begrenzt. In DDD-Begriffen sollte ein Modell perfekt zu seinem Zweck passen, und verschiedene Unterdomänen haben unterschiedliche Zwecke (und wahrscheinlich sogar unterschiedliche Chefs mit unterschiedlichen Zielen). Innerhalb einer Subdomain kann es jedoch aus verschiedenen Gründen zu unterschiedlichen BC kommen. Web- und Mobile-App können der Fall sein, oder verschiedene Modelle für die Planung oder Ausführung .
ZioBrando

Das Wichtigste ist jedoch zu verstehen, dass es zwei Problemfamilien gibt: 1) Lesen des vorhandenen Kontexts (in dem Sie nur die vorhandenen Modelle und Kollaborationen akzeptieren und kategorisieren können ), 2) Entwerfen der richtigen Software unter Berücksichtigung der vorhandenen Einschränkungen und Auferlegung von Kontextgrenzen zwischen kleinen, zweckorientierten Modellen. Im zweiten Szenario werden die Grenzen der Unterdomäne nicht absichtlich überlappt. ... im Allgemeinen kann es schwierig sein, in einer nicht perfekten Organisation nach perfekter Software zu suchen. Aber das Lösen dieser Inkonsistenzen könnte sich lohnen.
ZioBrando

8

Mithilfe domänengetriebener Designtechniken können wir Modelle der Welt erstellen, in der wir leben. Diese Modelle existieren als Ideen in den Köpfen der an einem Projekt beteiligten Personen.

Da die Telepathie noch in den Kinderschuhen steckt, werden diese Ideen mit Wörtern und Phrasen zwischen Menschen kommuniziert.

Wörter und Phrasen können im besten Fall mehrdeutig sein. Um Mehrdeutigkeiten zu vermeiden, verwenden wir den Kontext, um deren Bedeutung zu verdeutlichen.

Wenn Menschen tief in ein Softwareprojekt eintauchen, das sich über Jahre erstreckt, scheinen sie den Kontext zu vergessen, aus dem die Ideen hervorgingen, die sich in Wörter verwandelten, die sich in Variablennamen verwandelten, die in den Code eingebrannt wurden.

Neulinge kommen zum Projekt und beginnen, seine Sprache zu verwenden und zu konsumieren. Vielleicht sind sie Benutzer, vielleicht sind sie Entwickler. Wenn ihnen kein Kontext zur Verfügung gestellt wird, werden sie ihren eigenen Kontext (und damit Sinn) aus ihrer eigenen Lebenserfahrung entwickeln.

Dieser neu angewendete Kontext zeigt, wie neue Entwickler den Code umgestalten oder entwickeln. Wenn sie den falschen Kontext anwenden, werden sie den Code umgestalten und in die falsche Richtung entwickeln. Falsche Richtungen, egal wie gering sie auch sein mögen, können später viel größere Probleme verursachen.

Aus meiner Sicht ist ein "beschränkter Kontext" lediglich ein "geklärter Kontext", der an Projektneulinge weitergegeben wird, damit sie nicht ihren eigenen willkürlichen Kontext anwenden, um unser wunderschön geschliffenes Modell zu verschmutzen.

Es ist einige explizite Bestätigung durch das Team, dass this phraseim this part of the projectMittel genau this thing(und nicht, wie Sie vielleicht auch denken, that thing).

Ebenso ist es eine gute Idee, die Grenzen zwischen Ihrem Garten und dem Garten Ihres Nachbarn zu markieren. Sie legen die Grenze explizit fest, damit Sie sich nicht ärgern, wenn sie ein Blumenbeet auf Ihrem perfekt gepflegten Rasen graben.

Das ist es. Es ist eine sehr einfache Idee, die so wichtig ist, dass viel darüber geschrieben wurde.

Also ja. Ein begrenzter Kontext ist buchstäblich eine Grenze, ein „Zaun“, der den Kontext einer Unterdomäne vom Kontext einer anderen Unterdomäne in einem Projekt unterscheidet.

Das Modell und die Sprache einer Unterdomäne sind von anderen Modellen und Sprachen isoliert, um Mehrdeutigkeiten in der Bedeutung zu vermeiden.

Aber ja. Die Welt ist nicht so einfach.

Sie und das Team müssen sich strikt an den definierten Kontext halten. Es ist wirklich einfach, faul zu sein und sich den Kontext noch einmal vorzustellen, um beim Erstellen von Software Abstriche zu machen.

Außerdem interagieren die Dinge mit anderen Dingen, und begrenzte Kontexte müssen auch miteinander interagieren. Es gibt also verschiedene Muster, um zu beschreiben, wie diese Wechselwirkungen auftreten. In Eric Evans Buch Domain Driven Design Chapter 14 finden Sie folgende Muster: Shared Kernel, Customer Supplier, Conformist, Antikorruptionsschicht, Separate Ways, Open Host Service, Published Language.


1
Im Grunde genommen handelt es sich also um einen Zaun um eine Unterdomäne.
Robert Harvey

1
Ja. Soweit ich das sehen kann. Es ist ein Zaun.
JW01

0

Grundsätzlich definiert der begrenzte Kontext einige greifbare Grenzen der Anwendbarkeit einer Unterdomäne. Es ist ein abstrakter Bereich, in dem eine bestimmte Unterdomäne Sinn macht, während die anderen dies nicht tun. Das kann also ein Vortrag sein, eine Präsentation, ein Code-Projekt mit physischen Grenzen, die durch das Artefakt definiert werden.

In verschiedenen Situationen verwende ich drei verschiedene Perspektiven oder Metaphern des Konzepts des begrenzten Kontexts.

Aus der Laufzeitperspektive stellt es logische Grenzen dar, die durch den Vertrag eines Dienstes definiert sind, in dem das Modell implementiert ist. Der Vertrag kann als API dieses Dienstes oder als eine Reihe von Ereignissen dargestellt werden, die er veröffentlicht und verwendet. Aus dieser Perspektive hat der beschränkte Kontext also nichts mit physischen Grenzen zu tun.

Aus Sicht eines Domain-Experten ist der beschränkte Kontext ein Bereich, in dem bestimmte Geschäftsprozesse implementiert werden, die bestimmte allgegenwärtige Sprache angewendet wird und bestimmte Begriffe einen klaren Sinn ergeben, während die anderen dies nicht tun. Es ist also nur ein Rechteck, das auf ein Blatt Papier oder ein Whiteboard gezeichnet ist.

Für einen Softwareentwickler, dh aus der Perspektive des statischen Codes, repräsentiert ein begrenzter Kontext eine Art und Weise, wie ich meine Modelle um entsprechende Unterdomänen herum entworfen habe. Mit wie vielen Codebasen wird eine bestimmte Unterdomäne implementiert? Aus welchen Konzepten bestehen sie? Welche Konzepte sind in jedem von ihnen anwendbar? Deshalb heißt es, dass begrenzte Kontexte zu einem Lösungsraum gehören.

Ich mag dieses Beispiel des Bounded Context-Konzepts sehr.

Eine andere wichtige Frage (wenn nicht die wichtigste) ist, wie man begrenzte Kontexte identifiziert . Wenn Sie dies falsch machen, erhalten Sie gesprächige, nicht wartbare und eng verbundene Dienste , die auch als verteilter Monolith bezeichnet werden .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.