私はこの質問をFowler PoEAAに基づいています。このテキストに精通していると、ASP.NET MVCで使用されるViewModelはDTOと同じではありませんか?なぜ、なぜそうではないのですか?ありがとうございました。ビューモデルとデータ転送オブジェクトの違いは何ですか?
答えて
これらは(アプリケーションの別の層のデータをカプセル化する)同様の目的を果たしますが、それは異なる理由でさまざまです。
DTOの目的は、アプリケーションの層の間のコール数を減らすことです。特に、これらのコールが高価な場合(分散システムなど)、 DTOはほとんどの場合、ほとんどの場合、単純にシリアライズ可能で、ほとんど何も動作しません。
たとえば、電子商取引サイトを開発しているとします。
CreateCustomer
とAddCustomerAddress
はデータベースレベルで別々の操作ですが、パフォーマンス上の理由から、データをNewCustomerWithAddressDto
に集約して、クライアントがサーバーへのラウンドトリップを1回行うだけで済みます。サーバーは、データのパーセルとは異なることをしているかもしれません。「ViewModel」という用語は、MV *のさまざまな味の中でわずかに異なるものを意味しますが、その目的は主に懸念の分離です。モデルは、プレゼンテーション以外の目的で頻繁に最適化されています。モデルの実装の詳細からビューを切り離すのはViewModelの役割です。さらに、ほとんどのMV *パターンは、あなたのビューをできるだけ "ダム"にするようアドバイスします。そのため、ViewModelはプレゼンテーションロジックを担当することがあります。
たとえば、同じ電子商取引アプリケーションでは、
CustomerModel
は「新規顧客」ビューでのプレゼンテーションに間違った「形状」です。初心者のために、あなたのビューには、ユーザがパスワードを入力して確認するための2つのフォームフィールドがあり、CustomerModel
にはパスワードフィールドがまったく含まれていません!NewCustomerViewModel
にはこれらのフィールドが含まれ、MV *の趣旨に応じて、プレゼンテーションロジック(ビューの表示/非表示など)や基本的な確認(パスワードフィールドの一致など)が必要になる場合があります。 MVVMとMVPで
目的は異なっている:
- DTOのは、
- のviewmodelsは、エンドユーザにデータを表示するために使用されるデータを転送するために使用されます。
通常、ViewModelsにはプレゼンテーションデータが含まれていますが、魔法使いはDTOに似ているが、いくつかの違いがあります。列挙型、ローカリゼーション、通貨、日付形式などの表現を考えてみましょう。これは、通常、ビュー内に論理が存在しないようにする必要があるからです。
のDTOは通常非常にダムオブジェクトであり、基本的には、プロパティのセッターとゲッターのちょうど束です。一方ViewModelsには何らかの動作があります。
DTOを使用することの実際的な肯定的な副作用は、シリアル化を容易にします。あなたがC#のようにかなり複雑なオブジェクトを持っている場合、シリアル化したくないものを選択的に無効にしなければならないことがよくあります。これはむしろ醜くなり、DTOはこのプロセスを単純化します。
+1、主な相違点は、DTOは愚かであり(したがって、それらの*仕事*である単純にシリアライズ可能です)、ViewModelsには、ビュー(これは*自分の仕事です)に入っていたロジックを含めることができます。 –
@Igor Zevakaあなたは行動によって何を意味するのか説明していただけますか? –
ビューモデルとデータ転送オブジェクトには類似点と相違点があります。同様
:受信機へのレコードの 転送データ(オブジェクト・インスタンス、おそらくシリアライズ)、ビューまたはサービスかどうかの違い
: Aビューモデルをビュー、それに送信されることが意図されています書式設定とともに表示されます。 ビューモデルはコントローラにデータを戻します。 DTOは通常、プレゼンテーションを目的としていません。生データを送信することを意図しています。
- 1. エンティティ、ビジネスオブジェクト、データ転送オブジェクト、およびビジネスモデルオブジェクトの違いは何ですか?
- 2. データ転送オブジェクト(DTO)のポイントは何ですか?
- 3. データ転送オブジェクトとトランザクションサービスメソッド
- 4. データ転送オブジェクトとEntity Framework
- 5. WPFページ間のバインド/ビューモデル間でのデータの転送
- 6. JSON - 私のデータ転送オブジェクトではジャクソン
- 7. データ転送オブジェクトの継承は悪い習慣ですか?
- 8. フレームとオブジェクトの違いは何ですか?フレームとオブジェクトの違いは何ですか?
- 9. SSH転送とは何ですか?
- 10. Asp.net MVCのデータ転送オブジェクト
- 11. データ転送オブジェクトのcom.google.gwt.user.client.rpc.SerializationException
- 12. データ転送オブジェクトDTOビルド
- 13. Linq-SQLとWCFサービス - データ転送オブジェクト
- 14. JSON.stringifyオブジェクトとプレーンオブジェクトをjavascriptソケットで送信する違いは何ですか?
- 15. UMLの参照オブジェクトと値オブジェクトの違いは何ですか?
- 16. Qt信号転送 - 何が間違っていますか?
- 17. ejb3のデータ転送オブジェクトをベストプラクティスとみなしています
- 18. 転送オブジェクトは
- 19. データ転送速度は何ビット/秒ですか?
- 20. オブジェクトとレスポンスリターンを返すことの違いは何ですか?
- 21. クラス、オブジェクト、エンティティ:違いは何ですか?
- 22. OOPでは、オブジェクトとインスタンスの違いは何ですか?
- 23. Schemeでは、数値とオブジェクトの違いは何ですか?
- 24. EC2からECSリポジトリへのデータ転送はデータ転送であるか?
- 25. PHP:ヘッダデータとボディデータの送信の違いは何ですか?
- 26. Javaサーブレットのコンテキストでは、URL書き換えと転送の違いは何ですか?
- 27. MVCのモデルとデータとデータベースの違いは何ですか?
- 28. データ転送オブジェクトからDALオブジェクトにデータを簡単にバインドするには?
- 29. S3オブジェクトとObjectSummaryの違いは何ですか? boto3で
- 30. Forever-frameイベントとサーバー送信イベントの違いは何ですか?
これは優れた説明です!今まで私が見た唯一のビューモデルはゲッタとセッタしか持っていなかったので、私はそんな感じでした。うわーはDTOにとても似ています。私のためにこれをクリアしてくれてありがとう。 – mkelley33