Was ist eine Domain?

104

Ich sehe diesen Begriff sehr im Kontext der Softwarearchitektur ("Domain-Model", "Domain-Driven-Design" usw.). Ich habe es gegoogelt, aber ich bekomme Unmengen verschiedener Definitionen. Also, was ist es wirklich?

Sipo
quelle
12
Leider denke ich, dass es eines dieser Wörter ist, das keine klare Definition hat und häufig in mehrdeutigen Kontexten verwendet wird. Nachdem Sie es genug gesehen haben, erhalten Sie ein Verständnis. Mein Punkt ist, dass Sie nicht erwarten sollten, seine Verwendung zu verstehen, selbst nachdem Sie alle Antworten gelesen haben, die Sie hier sehen werden. Es wird einige Zeit dauern.
aaaaaa
15
@aaaaaa genau ... Humpty Dumpty lächelte verächtlich. ... "Wenn ich ein Wort verwende", sagte Humpty Dumpty verächtlich.
Emory
3
Ich denke nicht, dass es wahr ist, dass es keine klare Definition gibt. Wenn Sie sich die normale Webster-Definition ansehen, sehen Sie, dass es "eine Region ist, über die die Herrschaft ausgeübt wird", "eine Region, die durch ein bestimmtes physisches Merkmal gekennzeichnet ist". Ähnliche Definition in Mathematik - die "Domäne" einer Funktion. Sie können ein großes Objekt basierend auf den Verantwortlichen für diese Region oder basierend auf bestimmten Kriterien in Domänen oder Regionen aufteilen . Ein bisschen wie ein Modul. Ein "Domänenmodell" (nach meinem Verständnis) ist also ein Modell, mit dem Sie in der Geschäftslogik Ihrer App arbeiten können. DDD hat auch mit Arten von "Regionen" zu tun.
Sava B.

Antworten:

9

Das Wort „Domain“ im Domain Driven Design-Buch von Eric Evans hat eine bestimmte Bedeutung. Darum geht es in der Software.

Evans geht aber noch weiter. Seiner Ansicht nach gibt es Subdomains auch mit der gleichen Software. Und das ist der Teil des Buches, der sich mit „Strategic Design“ befasst.

Es gibt drei "Domänen": die Kerndomäne, die unterstützende Domäne und die generische Domäne. Manchmal bezeichnet er diese als Unterdomänen.

Evans kümmert sich auch sehr um das eigentliche Geschäft hinter der Software, und das Buch richtet sich nicht nur an Entwickler, sondern auch an Architekten und Manager, die sehen müssen, wie die Software und das Geschäft zusammenarbeiten können, und genau darum geht es ihm, wenn er über strategisches Design spricht und diese Subdomains.

Die Kerndomäne ist also der Teil der Software, der sowohl den Wettbewerbsvorteil als auch die „Existenzberechtigung“ der Software darstellt. Dies ist der Teil der Software, weshalb ein Kunde die Software im Vergleich zu einer anderen Software kauft. Normalerweise sieht Evans darin die Domäne mit dem geringsten Prozentsatz an Code. Sie können sich das als die wichtigsten 20% vorstellen. Es ist der Teil, den man nicht wirklich von der Stange kaufen kann und der möglicherweise nur ein einzelnes Modul oder eine einzelne Komponente der gesamten Software ist.

Die unterstützende Domäne ist weiterhin wichtig und kann für die Organisation eindeutig sein, ist jedoch nicht so wichtig wie die Kerndomäne. Ohne sie ist die Software nicht so wertvoll und der Kern verlässt sich darauf. Es können mehrere Module in der Software sein, die Sie selbst geschrieben haben und die wichtige, aber unterstützende Funktionen im Kern ausführen.

Die generische Domäne ist der am wenigsten benutzerdefinierte und in gewisser Weise der am wenigsten wichtige Teil der Software. Sie haben es vielleicht im eigenen Haus geschrieben, aber es ist möglicherweise effizienter, es einfach von der Stange zu kaufen oder bekannte Open-Source-Software zu verwenden. Dieser Teil des Systems ist wahrscheinlich nicht spezifisch für Ihre Gesamtdomäne. Ob Sie also ein Versandsystem für die Weiterleitung von Paketen oder ein System für die Patientenakten haben, die generische Domäne ist der Teil dieser Systeme, der allgemein und gerecht ist müssen einfach da sein, um überhaupt zu funktionieren. Dies macht wahrscheinlich den größten Teil des Systems insgesamt aus, aber nicht unbedingt.

Aus geschäftlicher Sicht ist es wichtig zu entscheiden, was Ihre Kerndomäne ist, und Ihre Entwicklungsressourcen dort zu konzentrieren. Evans hat viele Videos, insbesondere auf der InfoQ-Site, in denen er diese Konzepte ausführlicher erklärt.

Während wir in Software häufig von „der Domäne“ sprechen, ist dies bei DDD nicht so einfach, wie es scheint.

Ich sollte beachten, dass die Konzepte von DDD nicht unbedingt in der breiteren Software-Community existieren. Andere Entwickler, Autoren und Produktleute haben möglicherweise andere Ideen und Definitionen, einige subtiler und andere weniger. Selbst andere Autoren, die über DDD geschrieben haben, mögen diese Konzepte in Evans 'Buch beschönigen, aber ich bin der Meinung, dass diese Konzepte beim Schreiben und Planen eines Softwareprojekts immer noch nützlich sind.

RibaldEddie
quelle
1
Betreff: Ihr letzter Absatz: Vielleicht sollten wir uns auf den Kernbereich der Softwareentwicklung einigen? Aber ich denke, dass Humpty Dumpty sich vor langer Zeit durchgesetzt hat, als ob man sich auf OOP, Functional oder einen anderen Begriff geeinigt hätte.
@nocomprende nein, diese Konzepte sind spezifisch für eine bestimmte Individualsoftware in einer bestimmten Organisation zu einer bestimmten Zeit. Die Kerndomäne für MSFT Windows wird also je nach Marktbedingungen, Kundenerwartungen usw. unterschiedlich sein
RibaldEddie
1
Ich denke, es erinnert mich an das alte Sprichwort: "Es gibt zwei Arten von Menschen: diejenigen, die Menschen in zwei Arten einteilen, und diejenigen, die dies nicht tun." Aber ... für die zweite Art von Leuten würde es nur eine Art von Leuten geben ... - Unendlicher Indirektionsfehler - System angehalten
@nocomprende Entschuldigung, ich habe Ihren ersten Kommentar nicht wirklich verstanden - der Teil der Einigung über die Kerndomäne der Softwareentwicklung war ein Scherz.
RibaldEddie
109

Die Domain ist der reale Kontext, in dem Sie versuchen, ein Problem mithilfe von Software zu lösen. Jede Domain enthält Fachwissen, Vokabeln und Tools, die Teil dieser Domain sind.

Ein konkretes Beispiel für eine Domäne könnte beispielsweise "die automatisierte Bearbeitung komplizierter Teile mit einem rotierenden Hochgeschwindigkeitsfräser" sein. Das Software- und Hardwaresystem, das dies erreicht, wird als CNC- Fräsen bezeichnet .

Ein weiteres Beispiel für eine Domäne ist die Buchhaltungsabteilung eines Unternehmens.

Weiterführende Literatur
Bounded Context von Martin Fowler

Robert Harvey
quelle
4
Jep. Wenn Sie "Domain" lesen, können Sie möglicherweise "(auf ein bestimmtes Fachgebiet beschränkt)" ersetzen.
KlaymenDK
1
Das Interessante daran ist, dass die Domäne der Software wirklich nichts damit zu tun hat, was Menschen erreichen wollen oder was sie verstehen würden. Ich bin sicher, dass der einfache Computer in meinem Auto Dinge tut, um die Verbrennung zu optimieren, von denen ich nichts weiß und die mir ehrlich gesagt egal sind. Es ist also ein sehr gefährliches Missverständnis anzunehmen, dass es sich bei Software um eine menschliche Perspektive handelt. Dies kann nützlich sein, da Softwaresysteme größere Bereiche umfassen und das Bewusstsein und die Fähigkeit zur Auswahl von Zielen zunehmen. Hey, warte, hat Asimov nicht schon vor so langer Zeit daran gedacht?
1
@ user251748 - Nun, ich denke, es geht um Menschen und die Prozesse, an denen sie beteiligt sind, nur nicht unbedingt darum, was die Leute sofort verstehen.
Sipo
38

Dies bedeutet einfach, in welchem ​​Problembereich Sie arbeiten. Wenn Sie beispielsweise eine E-Commerce-Website erstellen, handelt es sich bei Ihrer Domain um "E-Commerce", das die mit den Vertriebspraktiken Ihres Kunden / Unternehmens verbundenen Prozesse umfasst. Ein Domain-Modell könnte also ein Produkt, eine Rechnung oder ein Versandprotokoll darstellen.

Becuzz
quelle
7
Angesichts der Tatsache, dass Websites domain namesauch als Domains bezeichnet werden, sollten Sie klarstellen, wie Sie das Wort Domain hier verwenden.
YetAnotherRandomUser
@YetAnotherRandomUser - Für mich ist ziemlich klar, was er meinte. ;)
Sipo
19

Eine Domain ist ein Wissensgebiet. Es kann sich jedoch um eine Aktivität handeln, bei der Probleme auftreten, die durch Ihre Software gelöst wurden. ( Wiki , DDD-Community )

Eric Evans erklärt in seinem Buch anhand der Frachtschifffahrt, was DDD ist. In seinem Beispiel dreht sich bei Domain alles um den Versand . Wie Fracht bewegt, verwaltet, versendet und verfolgt wird usw. Es gibt eigene, spezifische Regeln, Sprachen und Prozesse. Diese erstellen Domänenmodelle, Objekte, Dienste usw.

Wenn Sie eine Anwendung erstellen, verfügen Sie über eine bestimmte Berechtigung, genau wie in der realen Versandwelt, und nicht jeder kann auf Lager zugreifen. Wie Benutzer autorisiert werden und wie Berechtigungen erteilt werden, kann außerhalb der Domäne liegen , da die Informationen möglicherweise für den Frachtversand nicht relevant sind.

Einfach ausgedrückt: In einer Domain sind Sie geschäftlich tätig . Wenn Ihr Unternehmen Fracht versendet, ist Frachtversand Ihre Domäne. Wenn Ihr Unternehmen Personal authentifiziert und autorisiert, ist dies Ihre Domäne.

Pottfell
quelle
7

Von Domain-Driven Design: Komplexität im Herzen von Software angehen , Eric Evans:

Jedes Softwareprogramm bezieht sich auf eine Aktivität oder ein Interesse seines Benutzers. Der Themenbereich, auf den der Benutzer das Programm anwendet, ist die Domäne der Software.

Die Domäne eines Flugbuchungsprogramms besteht darin, dass echte Personen in echte Flugzeuge einsteigen.

Die Domäne eines Buchhaltungsprogramms ist Geld und Finanzen.

Die Domäne eines Quellcode-Kontrollsystems ist die Softwareentwicklung selbst.

Das Domain-Modell ist dann "eine rigoros organisierte und selektive Abstraktion" des Wissens im Kopf eines Domain-Experten.

Palermo beschrieb die Zwiebelarchitektur anhand dieser Zusammenfassung

Im Zentrum sehen wir das Domänenmodell, das die Kombination aus Zustand und Verhalten darstellt, die die Wahrheit für die Organisation modelliert.

Fowler wiederum bietet an

Ein Objektmodell der Domäne, das sowohl Verhalten als auch Daten enthält.

Wenn Sie sich neuere Definitionen ansehen, werden Sie mit größerer Wahrscheinlichkeit auf Verweise stoßen, bei denen sich das Domänenmodell und das Datenmodell unterscheiden . Ich denke nicht, dass eine Bedeutungsänderung so sehr eine Betonungsänderung ist - die Modellierung des Verhaltens (die Art und Weise, wie sich die Daten als Reaktion auf Informationen von außerhalb des Modells ändern), ist komplexer und variabler als die verschiedenen Arten, Dinge aufzuschreiben .

VoiceOfUnreason
quelle
Ich würde Ihre Definition von realen Aktivitäten leicht an das anpassen, was das Computersystem tut. Zum Beispiel "Die Domäne eines Quellcode-Kontrollsystems ist" - Speichern und Abrufen von Quellcode-Dateien . Domänen werden modelliert, um nicht mit realen Dingen fertig zu werden, sondern um die Erstellung und Wartung von Programmiersystemen zu vereinfachen. Die Betonung liegt also darauf, was ein Computer tun kann, um dies zu ermöglichen, und nicht darauf, was Menschen tun können. Digitale Röntgenstrahlen verbessern die Empfindlichkeit und die Bildverarbeitung des Röntgenprozesses, sie sind für den Menschen nicht von Nutzen und eignen sich ebenso für das Scannen von unbeaufsichtigtem Gepäck.
2

Da Sie wahrscheinlich bereits eine Vorstellung davon haben, was Domain ist, werden Sie wahrscheinlich als Nächstes versuchen, Sub-Domain, Domain-Modell und, was noch wichtiger ist, begrenzten Kontext zu definieren.

Ich beginne jedoch damit, meine Sichtweise der Domäne zu definieren.

Domain

Domain ist die Realität, in der wir leben: Entitäten, ihr Verhalten, Gesetze, denen sie gehorchen. Es existierte vor uns und wird nach uns existieren, in der einen oder anderen Form. Ihre Existenz hängt nicht von unserem Bewusstsein ab. Marketer kommen mit neuen Funktionen und führen Marktanalysen durch. Key Account Manager kommunizieren mit Kunden, Softwareentwickler automatisieren Geschäftsprozesse. Aus diesem Grund wird die Domain als Problemraum bezeichnet.

Subdomains

DDD impliziert die Zerlegung von Domänen in Unterdomänen, um deren Modellierung und Verständnis zu erleichtern. Die Tatsache, dass Sie ein Geschäft betreiben, lässt darauf schließen, dass es mindestens einen vorherrschenden Geschäftswert gibt. Die, mit der du Geld verdienst. Die, für die wir unser Geschäft gestartet haben. Selbst wenn Sie ein solches Wort wie „Kerndomäne“ nicht kennen, ist es dennoch vorhanden. Gleiches gilt für Subdomains: Möglicherweise benötigen Sie eine Buchhaltung, Personalabteilung und technischen Support - dies ist jedoch zweitrangig.

Domain-Modell

Es ist nicht erforderlich, extrahierte Unterdomänen in ihrer Gesamtheit zu modellieren. In jeder Unterdomäne, an der wir interessiert sind, gibt es einen bestimmten Satz von Regeln. Ein Regelsatz in einer Unterdomäne, der zum Erreichen eines bestimmten Geschäftsergebnisses erforderlich ist, wird als Modell bezeichnet.

Grenzenlose Kontexte

Das Wichtigste ist, dass der begrenzte Kontext eine logische Grenze ist.

Wenn sowohl die Unterdomänen als auch die Kerndomäne definiert sind, ist es Zeit, den Code zu implementieren. Eingeschränkter Kontext definiert konkrete Grenzen der Anwendbarkeit einiger Unterdomänen. Es ist ein Bereich, in dem eine bestimmte Unterdomäne sinnvoll ist, während die anderen dies nicht tun. Es kann ein Vortrag sein, eine Präsentation, ein Code-Projekt mit physischen Grenzen, die durch das Artefakt definiert werden.

Was kommt als nächstes?

Wenn Sie daran interessiert sind, wie das Konzept des begrenzten Kontexts mit dem Konzept der Unterdomäne korreliert, wie die Unterdomänen und begrenzten Kontexte definiert werden, wie die Kommunikation untereinander dargestellt wird und wie Teams unter Berücksichtigung dieser Konzepte organisiert werden, sind Sie wahrscheinlich daran interessiert weiter lesen .


quelle
Ich würde sagen, dass eine Domain für Software das ist, was die Software macht. Es existierte vor uns sicherlich nicht und es liegt ganz bei uns, Dinge zu tun, die wir delegieren wollen, damit sie ohne unsere Interaktion geschehen. Mit anderen Worten, es geht um einen Traum, den wir vergessen wollen. Und wir vergessen schnell, wie die Software funktioniert, sobald sie bereitgestellt wird. Software ist ein Spiel, das besser für Computer geeignet ist. Wir haben es bisher nur gemacht, weil wir die Computer noch nicht gebaut hatten, um das Problem zu lösen, das uns nicht mehr stören soll. Aber sehr bald ...
Ich habe mich in diesem Teil nicht klar ausgedrückt - "vor uns", mein Schlechtes. Ich habe absolut nicht gemeint, dass die Domain vor der Menschheit existiert. Mit "uns" meinte ich eher einen Softwareentwickler, der ein Problem der Automatisierung von Geschäftsprozessen im E-Commerce löst. Das Konzept des Handels existierte offenbar vor ihnen. Die Verantwortung des Entwicklers besteht also darin, es zu ermöglichen, Dinge an Computer zu delegieren, wie Sie sagten.
Richtig. Mein Punkt ist, dass die Leute denken, dass Computersysteme eine Möglichkeit sind, mit der realen Welt umzugehen. Aber Computer bringen viele Ideen, Anforderungen und Probleme ein, die einfach nie Teil der Domäne waren. Es ist, als würde man sagen, dass eine Operation ein Weg ist, um mit emotionalen Problemen umzugehen. Nun, Lobotomie funktioniert, aber emotionale Probleme haben wenig mit dem Gehirn zu tun. Und meine Gefühle werden stark von Hormonen und Neurotransmittern beeinflusst. Sind SSRIs Teil der Biologie, Psychologie, Beziehungen oder eine Kategorie für sich? Bei Computern geht es um Computer, nicht um reale Dinge.
1
Bei Computern geht es darum, echte Dinge zu modellieren. Nur ein weiterer Bereich, in dem echte Dinge getan werden könnten, echte Geschäftsprozesse implementiert werden könnten, echte Geschäftseinschränkungen angewendet werden könnten. Vor 50 Jahren hätte ich dem Kassierer in einem Geschäft 1 USD gezahlt, jetzt den gesamten Kaufprozess könnte ohne Interaktion mit dem Menschen sein. Trotzdem wurde mein echtes Geld von meinem echten Bankkonto abgebucht. Es spielt also keine Rolle, was in einem Prozess, einem Computer, einem Menschen oder etwas anderem vor sich geht. Wahrscheinlich könnte es Sie interessieren: medium.com/@wrong.about/…
Geld ist nicht real. Geschäftsprozesse sind nicht real. Alles, worüber wir sprechen können, ist ein Konzept, nicht real.