Was ist domänengetriebene Entwicklung in der Praxis? [geschlossen]

24

Ich habe von einem Entwickler in der Umgebung von Domain Driven Development gehört. Er sprach es aus, als handele es sich nur um die Silberkugel, um sich ändernden Anforderungen zu genügen.

Ich habe das Wiki gelesen . Immer noch nicht zu klar. Was ist "3D" in der Praxis? Ist es wirklich so erstaunlich, dass UML-Klassendiagramme jetzt einfach veraltet sind?

P. Brian Mackey
quelle

Antworten:

29

Zunächst einmal finde ich den Wikipedia-Artikel, auf den Sie sich beziehen, nicht sehr gut, vor allem, weil er eine Reihe von Dingen referenziert, die nur in Verbindung mit Domain Driven Design stehen und niemanden über die Praxis aufklären.

Aber als jemand, der sich Domain Driven Design zu Herzen genommen hat (was in der Regel eher von DDD als von 3D ausgeht), fühlte ich, dass die Grundlagen von DDD immer offensichtlich sind, wenn man so viel wie das erste Kapitel von Eric liest Evans 'Buch. Da es sich jedoch um eine Reihe von Mustern und Praktiken handelt, ist es nicht so einfach, eine 3-Satz-Zusammenfassung dessen zu geben, was es ist und welche Vorteile es bietet, ohne auf Einzelheiten einzugehen. Welche Details bei einer Person mitschwingen, kann ebenfalls sehr unterschiedlich sein. Es ist wahrscheinlich, dass ich vor 10 Jahren den Punkt überhaupt nicht gesehen hätte.

DDD ist keine Wunderwaffe. Wenn dies vernünftig gemacht wird, geht es darum, einen handwerklichen Ansatz für die Erstellung von Software zu verfolgen und die Notwendigkeit zu erkennen, die kognitive Reibung zwischen Entwicklungsteams und den Unternehmen, für die sie Software erstellen, zu verringern. Eine der wichtigsten Methoden ist es, eine Ebene zu haben, in der das vom Softwareteam und vom Geschäftsteam verwendete Domänenvokabular so gut wie möglich übereinstimmt. Sie bauen diese Ebene iterativ auf, wenn Sie das Geschäftsproblem verstehen, das Sie lösen möchten. Wenn Geschäftslogik sinnvoll in dieser Ebene codiert wird, die von allen verwickelten Abhängigkeiten isoliert ist, die Unternehmensanwendungen normalerweise haben, indem sie Interaktionen mit diesen Systemen auf Schnittstellen ausgliedern, wird die Sprache, die in der eigentlichen Domänenebene verwendet wird, schließlich ziemlich präzise, ​​offensichtlich und lesbar.

In Anbetracht der Form, in der sich die meisten Unternehmenssoftwareprodukte in der Praxis befinden, klingt DDD möglicherweise wie eine Wunderwaffe, da die meisten Unternehmenssoftwareprodukte so schlecht voneinander getrennt sind, dass sie fast nicht mehr getestet werden können und das Softwareteam große Angst vor Veränderungen hat Sie haben keine Ahnung, was die Nebenwirkungen von scheinbar sogar geringfügigen Codeänderungen sein könnten, wohingegen eine ordnungsgemäß faktorisierte Domänenschicht unabhängig testbar und überprüfbar sein wird. Tatsächlich erkennt DDD jedoch an, dass Systeme selten isoliert existieren. DDD enthält Bewältigungsmuster für Legacy-Systeme (Anti-Korruptions-Ebene, begrenzte Kontexte, um nur einige zu nennen).

Wenn Sie objektorientiertes Design üben, einschließlich der Disziplin der losen Kopplung, und Unit-Tests ziemlich religiös üben, Code gnadenlos umgestalten und beim Aufbau Ihres Systems mit Domänenexperten zusammenarbeiten, werden Sie im Grunde genommen ein Ergebnis erzielen, das ist Grundsätzlich sprechen die Befürworter von Domain-Design.

In Evans 'Buch werden einige spezifische Muster beschrieben, die sich hauptsächlich auf die Entwicklung von Unternehmenssoftware beziehen, und einige, die ziemlich universelle Prinzipien darstellen. Im Grunde ist DDD jedoch ein pragmatischer Ansatz für die Softwareentwicklung, der im Laufe der Zeit den Aufbau von technischen Schulden verringern kann. und machen Sie Ihre Kunden glücklicher, weil Sie in der Lage sind, die gleiche Sprache miteinander zu sprechen und bessere Lösungen zu liefern, da Sie sich besser verstehen.

JasonTrue
quelle
6

Eine allgemeine Beschreibung könnte sein:

Modellieren Sie Ihre Klassen, um die Datenstrukturen und das Verhalten Ihrer Problemdomäne widerzuspiegeln.

Auf diese Weise können Sie Änderungen in Ihrer Problemdomäne direkt auf Änderungen in Ihrem Code abbilden. Die Aktualisierung sollte daher einfacher sein, wenn sich Ihre Problemdomäne weiterentwickelt.

PenFold
quelle
2

HAFTUNGSAUSSCHLUSS: Ich habe diese Antwort hinzugefügt, nachdem diese Frage als Duplikat markiert wurde. Ich bin anderer Meinung, aber hier sind wir. :-)

Domain-Driven Design zielt darauf ab, Software in Domänen mit hohem Wert und hoher Komplexität zu entwerfen.

Dies führt zu einem anderen Ansatz für die Erstellung von Unternehmenssoftware: Es ist zu viel Lernen erforderlich, und die wichtigste Konsequenz ist, dass Sie auf den ersten Blick nicht zur richtigen Lösung gelangen.

  • Weil du auf dem Weg lernen wirst .
  • Weil die Stakeholder nicht auf einen Schlag die Wahrheit sagen.
  • Weil sich die Domain auf dem Weg weiterentwickelt.

Oder die Kombination von beidem.

In beiden Fällen benötigen Sie gute Software-Grundlagen, um Software häufig neu zu schreiben . Aus diesem Grund betonte das Buch eine Reihe von Mustern rund um das Domänenmodell: Sie waren die sinnvollste Kombination im Jahr 2004.

OOP und das taktische Muster sind jedoch nicht das Wichtigste. Technische Meisterschaft ist notwendig, um auf evolutionäre Weise großartige Software zu entwickeln. Aber es ist nur eine Zutat des Rezepts. Die Anderen?

  1. Besessenheit von der Sprache, um verborgene Nuancen zu entdecken.
  2. Konzentrieren Sie sich auf die Gesamtansicht, um großartige Inhalte liefern zu können.
  3. Zusammenleben von vielen einfacheren Modellen anstelle eines größeren.
  4. Betonung der kollaborativen Modellierung mit den Domänenexperten und innerhalb des Entwicklungsteams.
ZioBrando
quelle