2009-09-16 8 views

答えて

71

これらは(アプリケーションの別の層のデータをカプセル化する)同様の目的を果たしますが、それは異なる理由でさまざまです。

  • DTOの目的は、アプリケーションの層の間のコール数を減らすことです。特に、これらのコールが高価な場合(分散システムなど)、 DTOはほとんどの場合、ほとんどの場合、単純にシリアライズ可能で、ほとんど何も動作しません。

    たとえば、電子商取引サイトを開発しているとします。 CreateCustomerAddCustomerAddressはデータベースレベルで別々の操作ですが、パフォーマンス上の理由から、データをNewCustomerWithAddressDtoに集約して、クライアントがサーバーへのラウンドトリップを1回行うだけで済みます。サーバーは、データのパーセルとは異なることをしているかもしれません。

  • 「ViewModel」という用語は、MV *のさまざまな味の中でわずかに異なるものを意味しますが、その目的は主に懸念の分離です。モデルは、プレゼンテーション以外の目的で頻繁に最適化されています。モデルの実装の詳細からビューを切り離すのはViewModelの役割です。さらに、ほとんどのMV *パターンは、あなたのビューをできるだけ "ダム"にするようアドバイスします。そのため、ViewModelはプレゼンテーションロジックを担当することがあります。

    たとえば、同じ電子商取引アプリケーションでは、CustomerModelは「新規顧客」ビューでのプレゼンテーションに間違った「形状」です。初心者のために、あなたのビューには、ユーザがパスワードを入力して確認するための2つのフォームフィールドがあり、CustomerModelにはパスワードフィールドがまったく含まれていません! NewCustomerViewModelにはこれらのフィールドが含まれ、MV *の趣旨に応じて、プレゼンテーションロジック(ビューの表示/非表示など)や基本的な確認(パスワードフィールドの一致など)が必要になる場合があります。 MVVMとMVPで

+0

これは優れた説明です!今まで私が見た唯一のビューモデルはゲッタとセッタしか持っていなかったので、私はそんな感じでした。うわーはDTOにとても似ています。私のためにこれをクリアしてくれてありがとう。 – mkelley33

11

目的は異なっている:

  • DTOのは、
  • のviewmodelsは、エンドユーザにデータを表示するために使用されるデータを転送するために使用されます。

通常、ViewModelsにはプレゼンテーションデータが含まれていますが、魔法使いはDTOに似ているが、いくつかの違いがあります。列挙型、ローカリゼーション、通貨、日付形式などの表現を考えてみましょう。これは、通常、ビュー内に論理が存在しないようにする必要があるからです。

10

のDTOは通常非常にダムオブジェクトであり、基本的には、プロパティのセッターとゲッターのちょうど束です。一方ViewModelsには何らかの動作があります。

DTOを使用することの実際的な肯定的な副作用は、シリアル化を容易にします。あなたがC#のようにかなり複雑なオブジェクトを持っている場合、シリアル化したくないものを選択的に無効にしなければならないことがよくあります。これはむしろ醜くなり、DTOはこのプロセスを単純化します。

+3

+1、主な相違点は、DTOは愚かであり(したがって、それらの*仕事*である単純にシリアライズ可能です)、ViewModelsには、ビュー(これは*自分の仕事です)に入っていたロジックを含めることができます。 –

+0

@Igor Zevakaあなたは行動によって何を意味するのか説明していただけますか? –

1

ビューモデルとデータ転送オブジェクトには類似点と相違点があります。同様

:受信機へのレコードの 転送データ(オブジェクト・インスタンス、おそらくシリアライズ)、ビューまたはサービスかどうかの違い

: Aビューモデルをビュー、それに送信されることが意図されています書式設定とともに表示されます。 ビューモデルはコントローラにデータを戻します。 DTOは通常、プレゼンテーションを目的としていません。生データを送信することを意図しています。

関連する問題