Was macht meinen Code DDD (Domain-Driven Design) qualifiziert?

7

Ich bin neu bei DDD und denke darüber nach, diese Designtechnik in meinem Projekt zu verwenden.

Was mich jedoch an DDD interessiert, ist, wie grundlegend die Idee ist. Im Gegensatz zu anderen Design-Techniken wie MVC und TDD scheint es keine bahnbrechenden Ideen zu enthalten.

Ich bin mir sicher, einige von Ihnen werden das gleiche Gefühl haben, dass die Idee von root-Aggregaten und Repositories nichts Neues ist, denn wenn Sie MVC-Webanwendungen schreiben, müssen Sie ein einziges Master-Objekt haben Aggregat), die andere untergeordnete Objekte (dh Wertobjekte und Entitäten) in der Modellschicht enthalten, um Daten an eine stark typisierte Ansicht zu senden.

Für mich ist die einzige neue Idee in DDD wahrscheinlich das

  • "Intelligente" Entitäten (d. h. Sie müssen Geschäftsregeln für root-Aggregate haben)
  • Trennung zwischen Wertobjekt, Stammaggregat und Entitäten.

Kann mir jemand sagen, ob ich hier etwas verpasst habe? Wenn das alles für DDD ist, wenn ich eine meiner bestehenden MVC-Anwendungen mit den obigen zwei neuen Ideen aktualisiere, kann ich behaupten, dass es eine TDD-, MVC- und DDD-Anwendung ist?

    
oscarkuo 25.05.2010, 19:04
quelle

2 Antworten

14

Die kurze Antwort ist, dass der Code nicht so aussieht, als würde er ein DDD-Projekt sein, sondern wie Sie zu diesem Code gekommen sind. Jetzt für die lange Version ...

Sie haben absolut Recht, dass es an den DDD-Programmierpraktiken nichts sehr Revolutionäres gibt, aber Sie scheinen mit Ihrer Frage ein bisschen vom Ziel entfernt zu sein. Ein häufiger Fehler, den viele Entwickler mit DDD machen, ist, sich zu sehr auf die Programmierpraktiken zu konzentrieren, während einige der grundlegenderen Konzepte von DDD ignoriert werden. Im Kern besteht DDD darin, ein Modell in enger Zusammenarbeit zwischen Entwicklern und Domänenexperten iterativ zu entwickeln. Sie können alle gewünschten Dienste, Entitäten und Wertobjekte codieren, aber wenn Sie keine Domänenexperten in den Prozess einbeziehen oder das Modell nicht über Iterationen verbessern, dann praktizieren Sie, ehrlich gesagt, DDD nicht. Selbst aus einer Codierperspektive betrachten viele die Konzepte von Aggregatwurzeln, beschränkten Kontexten und Antikorruptionsschichten als wertvollere Werkzeuge als die Grundmuster.

Sie sind nicht allein darin, wie Sie DDD wahrnehmen. Ich finde, dass fast alle Entwickler eine DDD-Phase durchlaufen, in der sie versuchen, Beispielanwendungen unter Verwendung von Entitäten, Wertobjekten und Diensten zu implementieren, während sie alle anderen Praktiken ignorieren, die für DDD grundlegend sind. DDD ist ein Prozess, der entwickelt wurde, um komplexe Geschäftslogik zu verarbeiten. Wenn Sie also die Vorzüge einer über ein Wochenende entwickelten Beispiel-App beurteilen, werden Sie nicht mit dem Besten konfrontiert, was DDD zu bieten hat. Ich fordere Sie dringend auf, weiter in DDD zu schauen, da ich es für ein unentbehrliches Werkzeug gehalten habe, aber nie vergessen, dass es viel mehr als eine Mustersprache ist.

    
Stefan Moser 25.05.2010, 23:22
quelle
7

DDD ist nicht wirklich eine Checkliste - es ist eine Methodik.

Zusätzlich zu Stefans Antwort würde ich Folgendes vorschlagen (in der Reihenfolge ihrer Wichtigkeit):

  • Ubiquitäre Sprache - Ist Ihr Code? Verwenden Sie die gleichen Namen / Begriffe wie die Geschäft? Verwenden Sie Ihre Domain-Objekte die gleichen Namen wie das Geschäft?
  • Verhalten - Das meiste Verhalten / Logik direkt mit Domain Objects verbunden, oder tun Sie haben viele dumme DTOs?
  • Begrenzte Kontexte - Haben Sie klar definiert? Verantwortungsbereiche und Trennung von Bedenken?
  • Aggregate - Haben Sie anhand von Stammobjekten Aggregate und die Sperrstrategien zum Erzwingen von Geschäftsinvarianten identifiziert?
  • Repositories - Sind alle Daten vorhanden? Zugriff / Abfrage erfolgt über Repositories oder haben Sie SQL-Code in anderen Klassen?
  • Domain-Services - Haben Sie Domain Services für? Geschäftslogik, die nicht natürlich ist passen in ein Domain-Objekt
  • Spezifikationen - Haben Sie Geschäftsregeln, die gut in Spezifikationen integriert sind?
  • Abfragespezifikationen - Haben Sie? vordefinierte Abfragen / Filter schön Wrapper in Abfragespezifikationen?

Dann gibt es all die anderen Sachen!

Ich denke, die meisten DDD-Praktizierenden würden sagen wollen:

" Ich arbeite mit Domain-Experten zusammen, um deren Bedürfnisse zu verstehen, und schreibe Systeme, die (a) den Geschäftsbedingungen und Prozessen entsprechen, (b) anderen Entwicklern helfen, die Geschäftsdomäne zu verstehen, und (c) flexibel reagieren können Geschäftsanforderungen ändern. "

Hoffe das hilft!

    
Vijay Patel 26.05.2010 16:23
quelle