2016-01-25 21 views
8

通常、Spring MVCを使用して、コントローラ、サービス、およびリポジトリのレイヤーが表示されます。リポジトリ層は、データベースとの1対1マッピングであるエンティティモデルを使用します。私は次のことを考えました -MVCアーキテクチャDTO /モデルマッピング/変換

  1. サービス層は同じエンティティモデルを使用する必要がありますか?
  2. サービス層は個別のドメインモデルを使用する必要がありますか?はいの場合は、サービス層でのTo/Forマッピングを行う必要がありますか?
  3. コントローラのレイヤは同じドメインモデルを使用する必要がありますか?
  4. コントローラーレイヤーは別々のDTOモデルを使用する必要がありますか?はいの場合は、コントローラーレイヤーでTo/Forマッピングを行う必要がありますか?
  5. 冗長なコードをあまり書き込まなくても簡単にマッピングできますか?私は過去数回ドーザーを使用しました。

この質問は尋ねられたかもしれませんが見つかりませんでした。重複した質問のために私を許しなさい。

答えて

5
  1. はい。
  2. いいえ。サービスは、リポジトリオブジェクトから返されたエンティティモデルで機能するはずです。
  3. いいえコントローラはDTOを使用する必要があります。 DTOにはフォームフィールドと検証アノテーション(JSR303を使用している場合)が含まれている必要があります。
  4. はい。 DTOは、コントローラレイヤで使用されます。 DTOは、Entityモデルを受け入れるコンストラクタを公開する必要があります。 EntityモデルのDTOへの変換は、このコンストラクタで行われます。エンティティモデルにも同じです。エンティティモデルは、引数としてDTOオブジェクトを受け入れるオーバーロードされたコンストラクタも公開する必要があります。ここでDTOからエンティティモデルへの変換が行われます。
  5. DTO(Entity model as arg)とEntity model(DTO as arg)のオーバーロードされたコンストラクタは冗長です。
+0

>エンティティモデルでは、DTOオブジェクトを引数として受け入れるオーバーロードされたコンストラクタも公開する必要があります エンティティに依存エンティティ(一対多の関係)がある場合はどうなりますか? DTOでは、それぞれのIDを格納することができますが、DTO→エンティティ変換では、これらのIDによるサブエンティティのフェッチが必要になります。それを受け入れる方法は何ですか? –

+1

その場合、DTOからEntityモデルへの変換および変換を管理するファクトリオブジェクトを作成します。このファクトリオブジェクトにサービスを注入して、idでオブジェクトを見つけることができます。 – Bnrdo

4

1)はい、

2)いいえ、

3,4)を出力するためのentitysを使用するが、入力用CommandObjectsとのDTO(ただしエンティティ)を使用します。これはあなたのアーキテクチャーに依存しますが、クライアントがエンティティーのすべてのフィールドをマニピュレートする必要はありません。次に、要求マッピング(コマンドオブジェクト)に使用するオブジェクトをドメインエンティティから分離する必要があります。

+0

「DTO」から「エンティティ」への変換コードはどこに書く必要がありますか? 'DTO'クラスの' Entity'オブジェクトを別のパブリックメソッド( 'convertToEntity'と言う)と逆のものを使用して変換する必要がありますか?そうでなければ、これを行うにはSeparateクラスを記述する必要がありますか? –

+0

私のプロジェクトでは、エンティティにこのコードを置くことを推奨します。しかし私のプロジェクトでは、エンティティのすべてのプロパティが最大でも1つのDTOのプロパティであるというルールもあります。 – Ralph

+0

簡単な例を挙げてください。 –

関連する問題