それはDDDパターンの落とし穴ですか?
まず、いくつかの誤解を解き明かします。
DDDはパターンではありません。そして、実際にはパターンを規定していません。
エリック・エヴァンのDDD本の序文は次のように述べています。
主要なソフトウェア設計者は、少なくとも20年間、ドメインモデリングとデザインを重要なトピックとして認識してきましたが、驚くべきことに、何をする必要があるのか、どのように行うのかについてほとんど書かれていません。明確に定式化されたことはありませんが、オブジェクトコミュニティの底流として、私がドメイン駆動型設計と呼ぶ哲学が浮上しています。
[...]
成功に共通する機能は、設計の反復を通じて進化し、プロジェクトの構造の一部となったリッチドメインモデルでした。
この本は、設計決定を行うためのフレームワークと、ドメイン設計を議論するための技術用語を提供します。これは、広く受け入れられているベストプラクティスと、私自身の洞察と経験の統合です。
したがって、ソフトウェア開発とドメインモデリングにアプローチする方法に加えて、それらのアクティビティをサポートするいくつかの技術用語(さまざまな概念とパターンを含む用語)があります。また、まったく新しいものでもありません。
留意すべきもう1つのことは、ドメインモデルは、システム内で見つけることができるオブジェクト指向実装ではないことです。これは、それを表現する、またはその一部を表現するための1つの方法にすぎません。ドメインモデルは、ソフトウェアで解決しようとしている問題について考える方法です。それはあなたが物事をどのように理解し知覚するか、それらについて話す方法です。それは概念的です。しかし、あいまいな意味ではありません。それは深く洗練されており、努力と知識の収集の結果です。それはさらに洗練され、時間とともに進化する可能性があり、実装の考慮事項が含まれます(その一部はモデルを制約する可能性があります)。すべてのチームメンバーが共有する必要があります (およびドメインの専門家が関与)、システムの実装方法を推進し、システムがシステムを密接に反映するようにします。
OO開発者はおそらくOO言語でモデルを表現するのが一般的に優れており、多くのドメイン概念の表現はOOPでより適切にサポートされますが、それについて本質的にプロSQLまたはアンチSQLはありません。ただし、モデルの一部を異なるパラダイムで表現する必要がある場合があります。
私が疑問に思っているのは、非常に複雑なクエリがあるときに何が起こるかです[...]?
さて、一般的に言えば、ここには2つのシナリオがあります。
最初のケースでは、ドメインの一部の側面は本当に複雑なクエリを必要とし、おそらくその側面はSQL /リレーショナルパラダイムで最もよく表現されるので、ジョブに適切なツールを使用してください。これらの側面を、ドメインシンキングとコンセプトの伝達に使用される言語に反映します。ドメインが複雑な場合、これはおそらくサブドメインの一部であり、独自の境界付きコンテキストです。
もう1つのシナリオは、SQLで何かを表現する必要があると認識されているのは、制約された思考の結果であるということです。人やチームが常にデータベース指向の考え方をしている場合、慣性によって、物事にアプローチする別の方法を見つけるのは難しいかもしれません。これは、古い方法で新しいニーズを満たすことができない場合に問題になり、箱から出して考える必要があります。設計へのアプローチとしてのDDDは、ドメインに関する知識を収集および抽出することにより、その枠から抜け出す方法を見つける方法の一部です。しかし、誰もが本のその部分を無視しているようで、リストされている技術用語とパターンのいくつかに焦点を当てています。