2

パターン、原則、DDD の本で、ドメイン モデルを完全にカプセル化したい場合は、そのプロパティを非公開にし、Mementoパターンを使用してそれらを読み取ることができると読みました。リポジトリがドメイン モデルのスナップショットを取得し、データベース モデルにマップしてその変更をデータベースに保存する例もありました。また、db からデータベース モデルを取得し、それをスナップショットにマップしてから、Factoryパターンを使用してスナップショットからドメイン モデルを再構成し、それを操作します。

  1. ファクトリやスナップショットを使用せずに、データベース モデルをドメイン モデルにマップするだけで、ここでどれだけの作業が行われるのか、少し混乱しています。これははるかに簡単ではありませんか?
  2. この本に従うなら、ドメイン モデルのスナップショットをサービス レイヤーからプレゼンテーション レイヤーに戻し、それをビュー モデルにマップするのが正しい方法ですか? または、プレゼンテーション レイヤーでスナップショットを作成し、それをサービス レイヤーに渡し、ファクトリ パターンを使用してそこで再構成し、ドメイン モデルをリポジトリに渡します。リポジトリでは、再びスナップショットを取得してデータベース モデルにマップし、デシベル....

  3. このような複雑なマッピング アーキテクチャを使用する必要がある場合の例を教えてください。

はるかに簡単にできるのに、複雑なコードを書いているような気がします。

アップデート

私が求めていることを理解しやすくするために、コード例を載せることができます。;)

4

1 に答える 1

2
  1. リポジトリの仕事は、永続ストアからドメイン エンティティを保存して再水和することだけです。それを超える設計パターンは技術的な詳細にすぎず、通常は ORM の欠陥を回避する方法ですが、それ自体はリポジトリ (つまり、DDD の基本的なストレージ手段) の一部ではありません。

    その本のMementoパターンは「ORM /カプセル化の競合」を解決するために使用されていると思います。つまり、ORMはエンティティのすべてのフィールドへの書き込みアクセスを必要とし、それを再水和できるようにするため、それらを公開してカプセル化を破ることを余儀なくされます。

  2. いいえ、メメントまたはスナップショットは永続化のみを目的としています。サービス (ま​​たはアプリケーション) レイヤーは、実際のエンティティからマップするか、CQRS を使用している場合は、事前に計算された読み取り固有のモデルを使用します。

于 2016-08-16T11:19:37.623 に答える