Transfer オブジェクトと Domain オブジェクトの違いを簡単に説明していただけますか? そして、Javaの例を挙げることができれば、それは素晴らしいことです..
4 に答える
- DTO にはロジックがありません。それらにはフィールド (状態) しかありません。それらは、あるレイヤー/サブシステムから別のレイヤー/サブシステムにデータを転送するときに使用されます
- ドメイン オブジェクトはロジックを持つことができ (ドメイン駆動設計を使用しているか、データ モデルが乏しいかによって異なります)、通常はデータベース構造に関連しています。
貧弱なデータ モデルを使用している場合 (つまり、ドメイン オブジェクトにロジックがない場合)、DTO とドメイン オブジェクトを同じオブジェクトにすることができます。
データ転送オブジェクト (DTO)は、アプリケーションのさまざまな部分 (さまざまなレイヤーなど) またはさまざまなアプリケーション間でデータを交換するために使用されます。
- DTO は単に「ダム」なデータ構造です。
- これらはコントラクト/インターフェース定義で使用されます。つまり、これらのインターフェースのいずれかを使用するコンポーネントは、これらのオブジェクトについて「認識」しています。
ドメイン オブジェクト (DO) (およびその派生元のクラス) は、ビジネス ロジックを実装するため、ビジネス ロジック層/ドメインにのみ配置されます (用語が異なっていても、本質的な意味は同じです)。
DO はビジネス ロジックを実装するため、複雑になる可能性があり、メソッドやイベントなどを含めることができます。
DTO に関するもう 1 つのポイント
Martin Fowler の考え方によれば、DTO はいくつかのオブジェクトの組み合わせです (それぞれが、ほとんどの人が一般的に DTO と呼ぶものです)。その論理的根拠は、状況によっては、データの大きなパッケージをあまり頻繁に送信しない方が費用がかからないということです (「おしゃべり」で多くの小さなパッケージをネットワーク上で絶えず送信するのとは対照的に)。
したがって、ほとんどの人が DTO を単一のオブジェクトと見なす場合、Martin F は、DTO は複数の個別の (おそらく無関係な) オブジェクトを含む単なる「エンベロープ」であると述べています。大きな問題ではありません IMO - ほとんどの人は、DTOはこの回答の上部にある私の定義(またはそれに近いもの)によると考えています。
転送オブジェクトは、その使用の性質上、シリアライズ可能であることがよくあります。これは、呼び出しがリモートで JVM 間で行われる場合、またはステートフル セッション Bean などのシリアライゼーションを促進する方法で使用される場合に特に重要です。この目的のために、転送オブジェクトはそのような「処理」を受けやすくなければなりません。つまり、転送オブジェクトはシリアライズ可能を実装します。
ドメイン オブジェクトについては、その逆は言えません。ドメイン オブジェクトには動作が含まれる場合がありますが、DTO は単なる転送媒体にすぎません。
ビジネスの観点から見たドメイン オブジェクト。ドメイン全体とフローを伴うアクターまたはアクティビティのサブジェクトです。DTO は、データベース オブジェクトを忠実に反映するために (特に ORM アーキテクチャでは) データ Bean とは異なるデータ オブジェクトです。DTO はデータ集約を行うことができます。 、 変換 、 表現または一部のデータ操作のニーズを満たすための組み合わせ、それはサブジェクトではありませんが、ドメインオブジェクトにはドメインレベルの定義に基づいたサブジェクトベースがあります