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.
quelle
Antworten:
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 .
quelle
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 phrase
imthis part of the project
Mittel genauthis 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.
quelle
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 .
quelle