私たちの e コマース ドメインには、ネストされた配列を使用してモデル化されたエンティティの階層があります。これは、ドメイン駆動設計の原則を使用して行います (Eric Evans が説明)。当社の e コマース ドメインの中心的な概念は次のとおりです。
- 取引所があり、それぞれがサービスと支払いの両方を持っている契約。サービスには、各サービスを説明する機能があります。
この階層モデルにより、契約全体 (または契約) の一部として複数の契約 (つまり、交換) を持つものを含め、どんなに複雑であっても、あらゆる契約を表現できます。
Drools はそのような階層オブジェクト モデルをサポートしていませんか? 次のように、オブジェクト モデルを配列のないフラット オブジェクト モデル ( Drools Expert ドキュメントの「Fires HAVE Rooms」および「Sprinklers HAVE Rooms」の例など) に変換する必要がありますか?
- 契約。
- それぞれが単一のコントラクトを持つ 取引所。
- ServicesとPayments。それぞれに 1 つの Exchange があります。
- Features、それぞれに 1 つの Service があります。
このように、階層オブジェクト モデルをアトミック アサーションを持つフラット オブジェクト モデルに変換することが、Drools でサポートされ、最適に機能するというのは正しいでしょうか? Drools は、ファクトおよびサブコレクション内のファクトに対する LHS 条件を含むルールをサポートしていないようです。
もしそうなら、Drools がより階層的なオブジェクト モデルをサポートしないのはなぜですか? Drools が AI の世界 (オブジェクト指向の世界ではない) から来ているためでしょうか。この世界では、一次論理がすべての事実をアトミックな主語-述語-値ステートメントとして表現し、エンティティ オブジェクトがアイデンティティ、値を持つオブジェクト指向の世界ではありません。オブジェクトには ID がなく、エンティティ オブジェクトは他のエンティティ オブジェクトと値オブジェクトで構成されていますか?