5

データベース内の各テーブルに対して標準でアプリケーションを作成する場合、次のプロパティCreatedOnがあります。CreatedByModifiedOnModifiedByArchived

しかし、DDD に従おうとすると、これらのプロパティが本当にドメインの一部であり、ドメイン オブジェクトに含める必要があるかどうか疑問に思っています。これらの「メタデータ」プロパティをドメインから除外するが、それでもデータベースに残したい場合、ORM を使用する場合は何らかの DTO レイヤーを実装する必要があります。

したがって、ドメイン モデルは DTO にマップされCreatedOnModifiedOn、 などが設定されてから、データベースにプッシュされます。

だから私は私の質問は次のとおりだと思います:

  1. ドメイン モデルの一部としてこれらのプロパティを使用するだけですか?
  2. それらを削除しても、DTO をマップしなければならないという頭痛の種がありますか?
  3. 何らかの形式の監査ログを実装するなど、両方の問題を解消する代替手段はありますか?
4

3 に答える 3

6

ドメイン駆動設計を行う場合、通常、エンティティはデータベースの構造とあまり関係がありません。

いずれにせよ、ORM のテーブル オブジェクトとドメインの集計の間でマッピングを行う必要があるポイントにすぐにたどり着きます。

データベース主導の側面をドメイン モデルに強制することは、DDD の目的と矛盾します。

そうです、ORMのテーブルオブジェクト(とにかく純粋なデータです)を集計にマッピングすることをお勧めします。ここで、リポジトリ パターンの出番です。基になるデータを変換することにより、ドメインのオブジェクトを提供します。

作成/変更日やユーザーなどのメタデータが本質的にビジネス ドメインの一部ではない場合 (つまり、システム全体のロギング要件)、指定されたユーザーと日付/時刻は、テーブル オブジェクトに変換して保存するときに挿入できます。

階層化されたアーキテクチャは次のようになります。

 ----------------------------
| Domain                     | (Aggregates)
 ----------------------------

 ----------------------------
| Repositories               | (transforms table-objects into Aggregates)
 ----------------------------

 ----------------------------
| OR-Mapper                  | (loads records from DB into table-objects)
 ----------------------------

 ----------------------------
| Database                   | (this is where the data lives)
 ----------------------------
于 2013-05-28T15:33:54.040 に答える
3

それを見つける唯一の方法は、それらのフィールドがモデルに関連しているかどうかを製品所有者に尋ねることです。もしそうなら、それらはどのエンティティーに関連していますか?


これらの「メタデータ」プロパティをドメインから除外するが、それでもデータベースに残したい場合は、[.....]

なんで?それらはモデルの一部ではありません。つまり、ドメイン内のロジックの一部ではないということです。

3.何らかの形式の監査ログを実装するなど、両方の問題を解消する代替手段はありますか?

監査ログが要件である場合は、モデルの一部にする必要があります。

于 2013-05-28T15:28:49.890 に答える
1

「メタデータ」は必ずしもドメインの一部ではないという他の回答に同意します。

ドメインが Identity and Access Control ドメインの場合、ユーザー名などが含まれます。Identity and Access BC を使用する場合は、状況が異なる場合があります。値オブジェクトの形式でユーザー情報をドメインに追加する必要がある場合があります。

ほとんどの場合、このデータはアプリケーション サービス レベルに属していると思います。関連する DB フィールドに入力するために、リポジトリがアクセスできるアプリケーション サービスによって何らかのコンテキスト オブジェクトが入力されるオプションがある場合があります。このようにして、モデルから外れます。

于 2013-05-29T04:23:10.293 に答える