Was ist der Unterschied zwischen einem MVC-Modellobjekt, einem Domänenobjekt und einem DTO?
Mein Verständnis ist:
MVC-Modellobjekt:
Modelliert die anzuzeigenden Daten durch eine entsprechende Ansicht. Es wird möglicherweise nicht direkt einem Domänenobjekt zugeordnet, dh es kann Daten von einem oder mehreren Domänenobjekten enthalten.
- Client-Seite
- Kann Geschäftslogik enthalten. Z.B. Validierungen, berechnete Eigenschaften usw.
- Keine persistenzbezogenen Methoden
Domänenobjekt:
Ein Objekt, das reale Objekte in der Problemdomäne wie Reservierung, Kunde, Bestellung usw. modelliert. Wird zum Speichern von Daten verwendet.
- Serverseite
- Keine Geschäftslogik
DTO (Datenübertragungsobjekt):
Ein Objekt, das zum Übertragen von Daten zwischen Ebenen verwendet wird, wenn sich die Ebenen in separaten Prozessen befinden, z. B. von einer Datenbank zu einer Client-App. Ermöglicht eine einzelne Transaktion über die Leitung anstatt mehrerer Aufrufe beim Abrufen von Daten, die mehreren Domänenobjekten entsprechen. Ein DTO enthält nur Daten- und Zugriffsmethoden, und es ist keine Logik vorhanden. Die Daten beziehen sich auf eine bestimmte DB-Transaktion, sodass sie möglicherweise direkt einem Domänenobjekt zugeordnet werden oder nicht, da sie Daten von einem oder mehreren Domänenobjekten enthalten können.
- Wird sowohl auf Server- als auch auf Clientseite verwendet, wenn es zwischen Ebenen übertragen wird
- Keine Geschäftslogik
- Keine persistenzbezogenen Methoden
Also die Fragen:
Ist das obige Verständnis richtig? Vermisse ich einige wichtige Punkte?
Gibt es Gründe, Domänenobjekte nicht als MVC-Modell zu verwenden, vorausgesetzt, die Modellobjekte erfordern keine zusätzliche Geschäftslogik?
Gibt es Gründe, DTOs nicht als MVC-Modell zu verwenden, vorausgesetzt, die Modellobjekte erfordern keine zusätzliche Geschäftslogik?
quelle
Antworten:
Domänen- und Modellobjekte sind im Wesentlichen identisch und können Geschäftslogik enthalten. Abhängig von der Implementierung können Domänen- und DTO-Objekte gleichwertig sein, wenn Sie Geschäftslogik aus dem Modell in eine Serviceklasse entfernen.
Häufig ist eine Schlüsselvariante des DTO das Ansichtsmodell, das lediglich zum Übertragen von Daten zwischen dem Domänenmodell und der Ansicht verwendet wird, obwohl ein Ansichtsmodell häufig Logik enthalten kann, obwohl dies eine reine UI-Logik sein sollte.
quelle
Die Domäne und das DTO können auch Ihre "Modell" -Objekte sein. Sie können die Details des Domänenobjekts "Kunde" rendern.
Ein Domänenobjekt kann über eine Geschäftslogik verfügen, um die Eigenschaften der Domänenentität zu erzwingen. Validierung ist ein solcher Fall. Das Domänenobjekt selbst enthält keine persistenzbezogenen Methoden, kann jedoch Metadaten (wie Anmerkungen) enthalten, um die Persistenz zu unterstützen
Das POJO-Programmiermodell ermöglicht die Verwendung des gleichen Objekts wie Ihre Domänen-, DTO- und Modellobjekte. Im Wesentlichen werden keine externen Schnittstellen implementiert, die nur für eine Ebene gelten, für andere jedoch nicht.
quelle
Das Interessanteste ist jedoch, dass es kein Verhalten außer dem Speichern und Abrufen seiner eigenen Daten hat !!!
An der MVC-Methodik festhalten ...
Sie können offensichtlich Verhalten und Eigenschaften haben (siehe Unterschied zu DTO).
Oft kann eine Anwendung (eine leichte) ein Modell haben - ein Fall, in dem Ihr Modell genau Ihre Domäne ist. Ein anderes Modell kann ein völlig anderer Objekttyp sein, der ein anderes verarbeitet. Beide sind in diesem Fall Teil Ihrer Domain und werden als "Domain-Modelle - Objekte" bezeichnet.
Hoffentlich ist diese Antwort erschöpfend und macht alles für Sie klar!
quelle
Mein Verständnis (kurz gesagt) ist wie folgt:
(MVC) Modellobjekt:
PersonEditModel
,PersonViewModel
Oder einfach nurPersonModel
Domänenobjekt:
DTO (Datenübertragungsobjekt):
quelle
Jede Definition für die meisten Objekte ist je nach Verwendungsort der Objekte unterschiedlich:
quelle
1) Nein, es ist eine Definition von ViewModel. MVC Model Object und Domain Object sind beide identisch.
2) Domänenmodelle (Objekte) sind immer vorhanden, Geschäftslogik ist optional.
3) Wenn im Geschäftsobjekt keine Geschäftslogik vorhanden ist, wird sie automatisch zu DTO.
quelle