Erstens besteht der Hauptunterschied darin, dass ViewModel Verhaltensweisen oder Methoden haben kann, die DTO nicht darf !!!
Zweitens: Wenn Sie DTO als ViewModel in ASP.NET MVC verwenden, ist Ihre Anwendung eng mit DTO verbunden, und genau das ist der entgegengesetzte Zweck der Verwendung von DTO. Wenn Sie dies tun, was ist der Unterschied bei der Verwendung Ihres Domain-Modells oder DTO, mehr Komplexität, um ein Anti-Pattern zu erhalten?
Auch ViewModel in ASP.NET kann DataAnnotations zur Validierung verwenden.
Das gleiche DTO kann unterschiedliche ViewModels-Zuordnungen haben, und ein ViewModel kann aus unterschiedlichen DTOs bestehen (immer mit Objektzuordnung, nicht Zusammensetzung). Da ich denke, dass es noch schlimmer ist, wenn Sie ein ViewModel haben, das ein DTO enthält, haben wir das gleiche Problem.
Wenn Sie von Ihrer Präsentationsebene aus DTO als Vertrag betrachten, erhalten Sie ein Objekt, das Sie als fremd für Ihre Anwendung betrachten müssen und auf das Sie keine Kontrolle haben (selbst wenn Sie nicht über den Dienst, die dto- und die Präsentationsebene verfügen sind deine).
Wenn Sie diese saubere Trennung durchführen, können Entwickler problemlos zusammenarbeiten. Die Person, die ViewModels, Views und Controller entwirft, muss sich nicht um die Service-Schicht oder die DTO-Implementierung kümmern, da sie die Zuordnung vornimmt, wenn die anderen Entwickler ihre Implementierung abgeschlossen haben. Sie kann sogar das Mocking-Tool oder das manuelle Mocking zum Füllen verwenden die Präsentationsschicht mit Daten für den Test.