私はまだ DDD の初心者であり、CQRS の初心者であることは認めます。また、DDD や CQRS がすべての問題に対する適切なアプローチではない可能性があることも認識しています。それにもかかわらず、私はプリンシパルが好きですが、現在のプロジェクトのコンテキストでいくつか質問があります.
ソリューションは、現在の構成に基づいてパフォーマンス データを生成するシミュレータです。管理者は、シミュレーションの仕様を作成および変更できます。テスターはいくつかの環境条件を設定し、シミュレーターを実行します。結果がキャプチャされ、集計され、レポートされます。
このソリューションは、それぞれ独自のユース ケース、ドメイン ロジック、およびサポート データ構造を持つ 3 つのコンポーネント領域で構成されます。その結果、モジュラー設計は、ロジックを分離し、関心を分離する方法として魅力的に見えます。
- 最初の領域は、ユーザーが仕様を作成および変更できるようにする管理面です。これは、CRUD を多用する「モジュール」になります。
- 2 番目の領域は、シミュレーションを実行するためのものです。ドメイン モデルは最初の領域に似ていますが、編集に便利なモデルを提供するのではなく、シミュレーションを実行するために最適化されています。
- 3 番目の領域はレポートです。
私の最初の本能は、これらの方針に従い、各領域のドメイン層をカプセル化する 3 つのモジュール (アセンブリ) を作成することです。また、3 つの別個のデータベースを使用する必要がありますか? 書き込みと読み取りをサポートするために 3 つ以上でしょうか?
これはCQRSに適しているかもしれませんが、どうすればよいかわかりません。CQRS は、データを移動する一連のバックエンド プロセスを提案しているように思えます。しかし、それが事実であり、データの永続性が (DDD が示唆するように) 横断的である場合、データ アクセス コードはすべてのドメイン オブジェクトを認識する必要があるのではないでしょうか? もしそうなら、別々のモジュールを持つことには利点がありますか?
最後に、先ほど言い忘れたことは、仕様は発行されるまでは「ドラフト」と見なされ、その後シミュレーションに使用できるようになるということです。私の PublishingService は、SpecificationPublishedEvent に応答するときに、仕様を読み取り、モデルを変換し、実行のために永続化できるように、最初と 2 番目の領域の両方のドメイン モデルの知識を持っている必要があります。これは、結局のところ、3 つの境界コンテキストがないと思わせてくれます。それとも、私の分析で何かが欠けていますか?