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
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?
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.
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):
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!
Tags und Links architecture design domain-driven-design