Ein Datenübertragungsobjekt ist nur eine Teilmenge oder eine Obermenge von Daten, die zwischen logischen und physischen Grenzen übertragen werden sollen. Sie können Verhalten nicht bereitstellen. Sie sind nur Daten.
Auf der gegenüberliegenden Seite ist ein Ansichtsmodell eine Mischung aus Daten und Verhalten, da sie die logische Seite einer gegebenen Ansicht sind.
Da DTO und VM Muster sind, die verschiedene Anwendungsfälle abdecken, können Sie nutzlose Daten und unerwünschtes Verhalten erhalten und unerwünschte Abhängigkeiten hinzufügen.
Zum Beispiel kann ein DTO sowohl in der Domänen- als auch in der Anwendungsschicht verwendet werden. Wenn Sie sowohl DTO- als auch VM-Konzepte in einer einzigen Klasse verwenden, können Sie am Ende ein Domänenprojekt zwingen, einen Verweis auf eine UI-Bibliothek hinzuzufügen, um es erstellen zu können. Ich würde das so weit wie möglich vermeiden.
Zusätzlich Sie wissen, dass es ein objektorientiertes Konzept Erbe genannt, die Sie hier, um helfen kann, trocken zu bleiben (nicht selbst wiederholen):
public class Base {}
public class Dto : Base {}
public class ViewModel : Base {}
Zusammenfassend kann man Teilen Sie, was DTO gemeinsam ist, und betrachten Sie Modelle mit Vererbung und vermeiden Sie Code-Wiederholungen.
Wie wäre es mit 'DTO' ** als ** Basisklasse? Einfache VM-Casting auf Basisklasse erzeugt DTO (keine Notwendigkeit, irgendetwas zu kopieren). – Sinatr
@Sinatr Da ich ortodox bin, möchte ich die folgende Aussage nicht zu einer Wahrheit machen: 'if (vm ist Dto)': \ –