Wenn an der Benutzung des domain-driven development und Datenbank-driven development?
Kann jemand eine gute Antwort wenn Sie werden sollte, database driven development verwendet werden und Wann sollte man domain-driven development verwendet werden. Diese Entwicklung Ansatz haben Ihre Bedeutung in Ihrer angesehenen Bereichen. Aber ich bin mir nicht so ganz klar, welcher Ansatz ist geeignet in welcher Art von situation. Jede Empfehlung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst für einige Hintergrundinformationen, Martin Fowler eigentlich beschrieben, drei verschiedene "Muster" in seinem Buch Patterns of Enterprise Architektur. Transaction Script, Active-Record-und Domain-Modell. DDD verwendet das domain-model-pattern für die Architektur und beschreibt eine Menge von Vorgehensweisen und Strukturen zu implementieren und design dieses Modell.
Transaction-Skript ist eine Architektur, wo man keine Schichtung. Das gleiche Stück code liest und schreibt die Datenbank, verarbeitet die Daten und verarbeitet die Benutzer-Schnittstelle.
Active Record ist ein Schritt aus. Sie spalteten Ihre Benutzeroberfläche, Ihre business-Logik und Daten-layer noch zusammen Leben in active record-Objekte, die modelliert werden, nachdem die Datenbank.
Eines domain-Modell entkoppelt die business-Logik, die das Leben in Ihr Modell aus der Daten-Schicht. Das Modell weiß nichts über die Datenbank.
Und jetzt kommen wir zum interessanten Teil:
Die Kosten für diese zusätzliche Trennung ist natürlich zusätzliche Arbeit. Die Vorteile sind eine bessere Wartbarkeit und Flexibilität.
Transaction script ist gut, wenn Sie keine oder nur wenige business-Regeln, Sie wollen einfach nur zu tun, Daten-Eingabe und der überprüfung keine Schritte oder alle der überprüfung ist die Umsetzung in der Datenbank.
Aktiven Datensatz fügt einige Flexibilität zu. Da entkoppeln Sie Ihre Benutzeroberfläche können Sie zum Beispiel die Wiederverwendung der Schicht darunter zwischen den Anwendungen, können Sie easilly fügen Sie einige business-Regeln und-Verifikation-Logik die business-Objekte. Aber weil diese immer noch eng gekoppelt, um die änderungen in der Datenbank in der datamodel sehr teuer werden kann.
Verwenden Sie ein Domänen-Modell, wenn Sie wollen, zu entkoppeln, Ihre business-Logik von der Datenbank. Dieses können Sie Griff wechselnde Anforderungen einfacher. Domain Driven Design ist eine Methode, optimal nutzen Sie diese zusätzliche Flexibilität für die Implementierung komplexer Lösungen ohne an eine Datenbank-implementation.
Viele Werkzeuge lassen sich Daten-getriebene Lösungen zu erleichtern. Im microsoft-Raum, es ist sehr einfach, visuell design-websites, auf denen der gesamte code, der wohnt direkt hinter der web-Seite. Dies ist eine typische Transaktion Skript-Lösung, und das ist gut, um Ihr die Erstellung von einfachen Anwendungen. Ruby on rails hat die Werkzeuge, die das arbeiten mit active record-Objekte einfacher. Könnte dies ein Grund zu gehen, Daten-getrieben, wenn Sie brauchen, um die Entwicklung einfacher Lösungen. Für Anwendungen, bei denen das Verhalten ist wichtiger als Daten und es ist schwer zu definieren das Verhalten vorne DDD ist der Weg zu gehen.
Ich habe gefragt, eine ähnliche Frage: Wo beginne ich mit der Gestaltung bei der Verwendung von O/R-mapping? Objekte oder Tabellen?
Aus den Antworten, die ich bekam, würde ich sagen:, es sei denn, Sie haben konkrete Grund für die Verwendung von Datenbank-driven development, verwenden Sie domain-driven development.
Denken Sie an es auf diese Weise.
Die problem-Domäne vorhanden ist ewig. Ihre Klasse Definitionen spiegeln die ewigen Eigenschaften der Domäne.
In der relationalen Datenbank ist heute die bevorzugte Persistenz-Mechanismus. An einem gewissen Punkt, wir werden hier bewegen, um etwas "neuer", "besser", "anders". Die Datenbank-design ist lediglich eine Umsetzung; Sie reflektiert eine Architektur der Lösung mehr als die problem-Domäne.
Deshalb ist das domain-ersten. Klassen spiegeln die problem-Domäne und die universellen Wahrheiten. Relationale Datenbank und ORM-zweite und Dritte. Zum Schluss füllen Sie in anderen Sachen rund um das Modell.
Als Randbemerkung zu mendelt Beitrag, ich finde, dass es ein viertes Muster: eine, die geschichtet ist, trennt die Business Logik von Persistenz und Lagerung noch verwendet keine "Entitäten", oder "Business-Objekte". Eine Hälfte Weg, wenn man so will, zwischen Transaktions - /Action-script und DDD.
In einem großen Teil der Systeme, die ich gearbeitet habe, die Persistenz-Schicht (repositories) verwendet SqlClient direkt und zurückgegebenen Datensätze an eine aufrufende service. Die Leistungen, Entscheidungen und kompiliert Ansichten, die geschickt wurden, um den Benutzer über den controller. Sie migth betrachten Sie die service-Ebene ein business-Modell, und Sie haben Recht, aber es war nicht ein "domain" - Modell, in der DDD Sinn. Noch, ALLE Geschäftslogik aufgetreten in diese eine Ebene, Zeitraum. Jede Schicht hatte Ihren job. Die Ansichten angezeigten Daten, der Controller bestimmt, die Ansichten, die Persistenz-Schicht behandelt die Lagerung und den Diensten gearbeitet, die in-zwischen Controller und Ausdauer.
Der Punkt ist: DDD ist ein Ansatz für die Definition einer business durch Ul, tests und code. Es geht nicht um Entitäten, value-Objekte und Aggregate. Diese Dinge sind nur Produkte, die OOP-Puristen Ansatz DDD.
Nur mehr Gedanken für Ihre Aufmerksamkeit.
Für komplexe business-Modellen, ich bevorzuge eine Mischung von ActiveRecord und DDD. Die domain-Objekte wissen, wie Sie sich selbst retten und Daten-Aktionen fertig sind, gegen ein repository (nHibernate kann als generisches repository, wenn Sie auf einen repository-als etwas, das stellt Daten für das Modell als eine Sammlung). Die business-Logik befindet sich in der Domäne Entitäten, und sogar einige Kapselung von Datentypen kann erreicht werden, jedoch nur dann, wenn es eine geschäftliche Notwendigkeit. Einige Implementierungen von DDD gefallen entfernen alle öffentlichen setter und nur modifizieren von Entitäten durch Methoden. Ich bin kein fan der Umsetzung, es sei denn, es ist ein sehr gutes Geschäft benötigen.
Es scheint mir, dass diese Umsetzung bietet Ihnen die einfache Bedienbarkeit von ActiveRecord und die business-Logik Kapselung von DDD.
Domain-Driven Development ist sicherlich der Weg zu gehen. es macht mehr Sinn und erhöht die Flexibilität.