36

サービスレイヤーによって呼び出されるデータアクセスを担当するリポジトリレイヤーがあります。サービス層は、シリアル化されてネットワーク経由で送信される DTO を返します。多くの場合、サービスはリポジトリにアクセスし、リポジトリが返すものを返すだけです。

しかし、それが機能するには、リポジトリがその DTO のインスタンスを返す必要があります。それ以外の場合は、最初に、リポジトリが返すデータ レイヤー オブジェクトをサービス レイヤーの DTO にマップし、それを返す必要があります。それは無駄に思えます。

その上、DTO の作成がサービス レイヤーで発生する場合、以前は 1 つのリポジトリ呼び出しで 1 つのデータベース クエリで実行されていた可能性があることを、サービス レイヤーで複数のリポジトリ呼び出しで実行して「作成」する必要があります。最終DTO。もちろん、そのような合成オブジェクトを含むことができるデータ層とサービス層の間のトランスポート オブジェクトを作成しない限り。次に、 DTOにマップする必要があります。純粋さのために無駄に思えるだけです。しかし、ネットワーク経由で送信するために存在するだけのオブジェクトをリポジトリ層に返すのも、間違っているように感じます。

4

2 に答える 2

28

簡単な答え: いいえ。

長い答え: リポジトリは、永続化されたデータをエンティティ (モデル) に戻したり、その逆を行ったりする責任があります。

モデルは、ビジネス エンティティを表すビジネス モデルです。一方、DTOはモデルのように見えますが、さまざまな環境間でのオブジェクトの転送に関係しており、本質的に一時的なオブジェクトです。通常、マッパーはモデルを DTO に変換する責任があります。

于 2011-02-21T17:19:36.463 に答える