私はDDDにかなり慣れていないので、ここに私のジレンマがあります:
エンティティ B への参照を持つエンティティ A を永続化する必要があります (両方ともエンティティ ルートであると考えてください)。UI レイヤーは、これらすべての情報を (コントローラーで) A_DTO (A の DTO クラス) を介して収集し、属性を DTO から A の新しいインスタンスにマップします。次に、 A の B への参照のために、UI は ID を送信します。リポジトリの背後で ORM を使用しているため、 BRepository から B のオブジェクト インスタンスを検索し、作成中の新しい A インスタンスに参照を設定し、最後に ARepository.save(A インスタンス) を呼び出します。
ここにはいくつかのオプションがあります
- これらすべてを UI レイヤー (コントローラーまたは何らかのサービス ファサードのいずれか) で実行するか、
- createA という ApplicationService またはドメイン Service でこれを行います。
どちらのオプションが正しいでしょうか??. ここで本当に際立っているのは、ID で B をルックアップして A オブジェクトの set への参照を取得するプロセスです。これは、ORM を維持するためのプロセスまたはドメイン モデルの一貫性を維持するためのプロセスと同様に主張できます。B の参照を A に設定するプロセスには、いくつかの暗黙のビジネス ルールと検証が存在する可能性があります。これらが、ここでの決定の原動力になっていると思います。
また、エンティティの作成プロセスでバリデーションが織り込まれ、UI を介してクライアントにバブルされ、別のリポジトリによる検証のレベル ?? またはコントローラーで発生する明示的なステップとして??