2

私のアーキテクチャは次のようになります。

  • ドメイン
    • エンティティ
    • インターフェース
    • DTO
  • インフラストラクチャー
    • ORM
    • リポジトリ
  • サービス
    • ウェブサービス

AutoMapper を使用して変換したいと考えています。サービス レイヤーが DTO についてのみ認識できるようにしたいので、インターフェイスとリポジトリが変換された DTO を返すと推測しています。他の方向については、リポジトリが DTO を取得してエンティティに変換されると思いますか? 私はここで正しい道を進んでいますか、それとも左翼手にいますか?

4

2 に答える 2

4
  1. リポジトリは、動作とトランザクションを中心に設計されたドメイン集約のみを処理する必要があります。

  2. コマンドを処理するとき、アプリケーション層(Webサービス)はドメインモデルでロジックを呼び出し、集約をリポジトリに保存する必要があります。

  3. クライアントがWebサービスからのデータを必要とする場合、2つのオプションがあります。

    • リポジトリから集計を取得し、それらをPOCO DTOにマップします(おそらくAutoMapperを使用します)。
    • DTOに直接データをクエリするための薄いデータアクセス層を作成します。

後者のアプローチが私の好みです。私が言ったように、ドメインアグリゲートは動作とトランザクションによって設計されるべきです。画面にデータを表示するようには設計されていません。適切に設計された(つまり、適切にカプセル化された)ドメインエンティティからデータのコンシューマー(UIなど)のDTOにデータをマッピングしようとするのは、常に厄介なプロセスです。丸い穴に四角いペグです。私の意見では、クライアントが必要とするデータを返す薄いデータアクセス層を提供する方がはるかに簡単です。ドメインモデルはこのプロセスに関与する必要はありません。それは単なるデータです。これがCQRSの基本原則です。

いずれの場合も、ドメインエンティティをDTOに変換するのはアプリケーション層(Webサービス)である必要があります。

于 2012-07-10T08:31:28.240 に答える
1

サービス層はエンティティを返す必要があり、プレゼンテーション層 (コントローラーが存在する場所) はエンティティを、ユーザー インターフェイス (DTO) にマップされるオブジェクトに変換する必要があります。もちろん、これはリポジトリが通常のエンティティを返すことも意味します。

マッピングは一度だけ作成することを忘れないでください。ブートストラップまたはすべてのマッピングを作成するものを作成すると、コントローラーで Mapper.Map() を呼び出すだけで済みます。

于 2012-07-09T19:08:53.540 に答える