Frage

Ich bin stützen diese Frage auf Fowler PoEAA. Angesichts Ihrer Vertrautheit mit diesem Text, nicht die Viewmodel verwendeten in ASP.NET MVC gleichen wie DTOs? Warum oder warum nicht? Danke.

War es hilfreich?

Lösung

Sie dienen einem ähnlichen Zweck (Daten für eine andere Schicht der Anwendung Verkapselung), aber sie tun es anders und aus unterschiedlichen Gründen.

  • Der Zweck eines DTO ist die Anzahl der Anrufe zwischen den Ebenen einer Anwendung zu reduzieren, insbesondere dann, wenn diese Anrufe teuer (z.B. verteilte Systeme) sind. DTOs sind fast immer trivialer serializable, und fast nie Verhalten enthalten.

    Zum Beispiel sind die Entwicklung Sie eine E-Commerce-Site. CreateCustomer und AddCustomerAddress sind getrennte Vorgänge auf Datenbankebene, aber Sie könnten für wollen Performancegründen ihre Daten in eine NewCustomerWithAddressDto aggregieren, so dass Ihr Kunde braucht nur eine Hin- und Rückfahrt mit dem Server zu machen, und muss nicht, dass die Pflege Server kann eine Reihe von verschiedenen Dingen mit dem Paket von Daten tun.

  • Der Begriff „Viewmodel“ bedeutet etwas anderen Dinge in verschiedenen Geschmacksrichtungen von MV *, aber ihr Zweck ist es in erster Linie Trennung von Bedenken. Ihr Modell ist für einige andere Zwecke als Präsentation häufig optimiert, und es ist die Verantwortung der Ansichtsmodell Ihrer Ansicht vom Implementierungsdetails Modell zu entkoppeln. Zusätzlich sind die meisten MV * Muster beraten Ihre Ansichten als „dumme“ wie möglich zu machen, und so die Ansichtsmodell nimmt manchmal die Verantwortung für Präsentationslogik.

    Zum Beispiel in der gleichen E-Commerce-Anwendung, Ihre CustomerModel ist die falsche „Form“ für die Präsentation auf den „Neuen Kunden“ Ansicht. Für den Anfang Ihrer Ansicht hat zwei Formularfelder für Ihre Benutzer sein Passwort einzugeben und zu bestätigen, und Ihre CustomerModel enthält nicht überhaupt ein Passwort-Feld! Ihre NewCustomerViewModel werden diese Felder enthalten und können, je nach Geschmack des MV *, für einige Präsentationslogik verantwortlich sein (zB zum Anzeigen / Verbergen Teile der Ansicht) und grundlegende Validierung (zB gewährleistet, dass beide Passwortfelder übereinstimmen).

Andere Tipps

Der Zweck ist anders:

  • DTO werden verwendet, um Daten zu übertragen
  • Viewmodel werden verwendet, um Daten an einen Endbenutzer zu zeigen.

So normalerweise enthalten Viewmodels die Präsentationsdaten, Hexe ist in vielen Fällen ähnlich dem, was in einem DTO ist, aber mit einigen Unterschieden. Denken Sie an Darstellung von Aufzählungen, Lokalisierung, Währung, Datumsformate, .... Dies liegt daran, normalerweise sollte es keine Logik in der Ansicht sein.

DTOs in MVVM und MVP sind in der Regel Sehr Dumb Objekte und sind im Grunde nur ein Haufen von Immobilien Getter und Setter. Viewmodels auf der anderen Seite kann ein bestimmtes Verhalten haben.

Ein praktischer Nebeneffekt DTOs zu haben, ist einfacher Serialisierung zu ermöglichen. Wenn Sie in eine ziemlich komplexe Aufgabe haben, sagen C #, werden Sie oft selbst selektiv mit finden, um die Dinge auszuschalten, dass Sie nicht serialisiert werden soll. Dies kann ziemlich hässlich und DTOs vereinfacht diesen Prozess.

A View Modell und ein Objekt Datenübertragung haben Ähnlichkeiten und Unterschiede.

Ähnliche:    Übertragen von Daten in einem Datensatz (Objektinstanz, vielleicht serialisierten) zu einem Empfänger, ob eine Ansicht oder ein Dienst

Unterschied:   Ein Blick Modell soll sich auf eine Ansicht gesendet werden, wo es mit der Formatierung angezeigt wird.   Eine Ansicht Modell sendet auch Daten an einen Controller zurück.   Ein DTO ist in der Regel nicht für die Präsentation vorgesehen. Es ist beabsichtigt, Rohdaten zu senden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top