web-dev-qa-db-ja.com

TransferオブジェクトとDomainオブジェクトの違い

TransferオブジェクトとDomainオブジェクトの違いを簡単に説明していただけませんか?そして、uがJava=の例を示すことができれば、それは素晴らしいことです。

36
testndtv
  • DTOにはロジックがありません。フィールド(状態)のみがあります。あるレイヤー/サブシステムから別のレイヤー/サブシステムにデータを転送するときに使用されます
  • ドメインオブジェクトにはロジックがあり(ドメイン主導の設計を使用しているか、貧血データモデルを使用しているかに応じて)、通常はデータベース構造に関連しています。

貧血データモデルを使用している場合(つまり、ドメインオブジェクトにロジックがない場合)、DTOとドメインオブジェクトは同じオブジェクトにすることができます

関連: http://techblog.bozho.net/?p=427

52
Bozho

Data-Transfer-Object(DTO)は、アプリケーションの異なる部分(異なるレイヤーなど)間または異なるアプリケーション間でデータを交換するために使用されます。

  • DTOは単に「ダム」データ構造です。
  • それらはコントラクト/インターフェース定義で使用されます-これは、これらのインターフェースの1つを使用するコンポーネントがこれらのオブジェクトについて「知っている」ことを意味します。

ドメインオブジェクト(DO)(およびそれらの派生元のクラス)はビジネスロジックを実装するため、ビジネスロジックレイヤー/ドメインにのみ配置されます(基本的な意味は用語が同じであっても同じです)異なっています)。

DOはビジネスロジックを実装するため、複雑になる可能性があり、メソッド、イベントなどを含めることができます。

DTOに関するもう1つのポイント

マーティンファウラー学派の思想によると、DTOは複数のオブジェクトの組み合わせです(それぞれがほとんどの人が通常DTOと呼ぶものです)。理論的根拠は、状況によっては、データの大きなパッケージをそれほど頻繁に送信しない方が費用がかからないということです(「おしゃべり」で多くの小さなパッケージを常時送信するのではなく)。

したがって、ほとんどの人がDTOを単一のオブジェクトとして表示する場合、Martin Fは、DTOは単にseveral離散(およびおそらく関連のない)オブジェクトを含む「エンベロープ」であると述べています。大きな問題ではないIMO-ほとんどの人は、DTOは私の定義に従ってこの回答の上部にある(またはそれに近いもの)と考えています。

20
Adrian K

転送オブジェクトは、その使用の性質上、しばしばシリアライズ可能です。これは、呼び出しがリモートでJVM間である場合、またはステートフルセッションBeanなどのシリアライズを促進する方法で使用される場合に特に関係があります。この目的のために、転送オブジェクトはそのような「処理」の影響を受けやすい必要があります。転送オブジェクトはシリアライズ可能を実装します。

ドメインオブジェクトについては、その逆は言えません。ドメインオブジェクトには動作が含まれている場合がありますが、DTOは単なる転送媒体です。

4
Oh Chin Boon