まず、主な違いは、ViewModel は DTO がすべきではない動作やメソッドを持つことができるということです!!!
次に、ASP.NET MVC で DTO を ViewModel として使用すると、アプリケーションが DTO と緊密に結合されます。これは、DTO を使用する目的とは正反対です。そうする場合、ドメイン モデルまたは DTO を使用した場合の違い、アンチパターンを取得するための複雑さは何ですか?
また、ASP.NET の ViewModel は、検証のために DataAnnotations を使用できます。
同じ DTO が異なる ViewModel マッピングを持つことができ、1 つの ViewModel を異なる DTO から構成できます (常に構成ではなくオブジェクト マッピングを使用します)。DTO を含む ViewModel がある場合はさらに悪いと思うので、同じ問題が発生します。
プレゼンテーション層から、DTO をコントラクトと考えてください。アプリケーションにとって見知らぬものと見なす必要があり、それを制御する必要のないオブジェクトを受け取ります (サービス、dto およびプレゼンテーション層を持っている場合でも)。あなたのものです)。
最後に、この明確な分離を行うと、開発者は簡単に連携できます。ViewModel、View、および Controller を設計する人は、サービス レイヤーや DTO の実装について心配する必要はありません。他の開発者が実装を完了したときにマッピングを作成するためです。モッキング ツールや手動のモッキングを使用して埋めることもできます。テスト用のデータを含むプレゼンテーション層。