8

これらすべてがどのように連携するかを理解しようとしています。DTO は基本的に、ドメイン オブジェクトがフォームなどとやり取りするための単なるデータのコンテナーであることを知っています。Domain オブジェクトには DTO が含まれていますか?それとも、DTO と Domain オブジェクトには、手動でマップされる同じプロパティがすべて含まれていますか?

サービスで DTO 型を公開している場合、クライアントで get/set 操作ごとにラウンド トリップを作成せずに getter と setter を使用するにはどうすればよいですか? 1 つの長いコンストラクターを使用できることはわかっていますが、7 つを超えるプロパティがある場合は見苦しくなります。

リポジトリ パターンを実装する場合、DTO またはドメイン オブジェクトを渡しますか?

4

2 に答える 2

4
  • DTOオブジェクトとドメインオブジェクトは分離する必要があります。
  • DTOをドメインオブジェクトにマップし、ドメインオブジェクトをDTOにマップするマッパーが必要です。このマッパーはインターフェースの実装である必要があり、デフォルトのマッパーはリフレクションを使用してオブジェクトを相互にマップします。
  • リポジトリは、ドメインオブジェクトを返すサービスである必要があり、ドメインオブジェクト自体がサービスを提供する必要があります。
  • DTOがWebサービスによって公開されるクラスである場合、作成されるWSDLはプロパティを要素として定義し、反対側で作成されるプロキシは、クライアント自体で実行されるgetter/setterプロパティを作成するだけです。 、したがって、ゲッターとセッターはラウンドトリップを引き起こしません。
  • DTOでパブリック変数を作成しただけでも、プロキシはゲッターおよびセッターとして実装されます。
于 2009-02-11T06:31:31.170 に答える
1

DTO のコンシューマが Domain オブジェクトの使用を開始できるように、DTO に Domain オブジェクトへの参照を含める方がよいと思います。つまり、DTO のコンシューマーが Domain オブジェクトを変更してはならない場合は、Domain オブジェクトにカプセル化された値を DTO に含める必要がある場合があります。Domain オブジェクトのディープ コピーが必要になる場合があるため、これは難しい場合があります。

DTO 型をサービスとして公開すると、getter/setter が使用されて往復することが問題になる理由がわかりません。サービスがリモート サービスの場合、返された DTO はとにかくシリアル化され、ゲッター/セッターは値のコピーを取得します。サービスがリモートでない場合は、クライアントとサービスが同じプロセス空間にあるため、「往復」を行っても大きなペナルティはないようです。

于 2008-11-08T13:51:43.400 に答える