運用型/トランザクション型のアプリケーションで作業している場合、DDD は自然なことであることがわかりました。しかし、私は常に、報告タイプの機能を処理する合理的な方法で立ち往生しています。
私が話しているレポートは、レポートの生成だけでなく、比較的複雑なクエリを実行する関数にもバインドされています。(トレーダーが行ったすべての注文の概要を表示したり、特定の株を持つ取引口座の口座概要を表示したりするなど)。それらは、それらの操作機能と一緒に使用される単純なクエリまたはサポート機能である可能性があります。
そのような関数の場合、SQL (または任意のクエリ言語) で結合を実行し、関心のある列を取得し、マッサージされた結果セットを返すことができれば、非常に自然です。ただし、DDD ではうまくいかないようです。追加の特別なリポジトリが必要であるか、既存の最も関連性の高いリポジトリが特別な「エンティティ/値オブジェクト」(特殊化された結果セット) を返す必要があります。この種の特別な「エンティティ」には、実際にはドメインの意味はありません。
意味のあるドメイン層を利用したい場合、異なるリポジトリから多くの余分なルックアップが作成される可能性があり、さらにドメインまたはサービス層で多くの集約作業が発生する可能性があり、パフォーマンスが大幅に低下する可能性があります。
また、これらの種類の関数に別の「パス」を用意することも考えました。これは、「DDD パス」を経由せず、DB からレポート データを取得する独自の方法を持ち、表示用の結果を構成します。ただし、アプリケーションが不必要に複雑になるだけでなく、さらに悪いことに、従来の DB 指向の開発に慣れている開発者が適切でなくてもこのパスを使用する傾向があるように、追加のパスを提供しました。
このような状況は非常によくあることだと思いました (通常、大きなシステムには運用機能だけでなく、レポート機能や照会機能も含まれません)。人々がどのように対処しているか知りたいですか?