Domain driven design Drools vs DDD:Drools是否需要平面对象模型?

Domain driven design Drools vs DDD:Drools是否需要平面对象模型?,domain-driven-design,drools,object-model,Domain Driven Design,Drools,Object Model,在我们的电子商务领域中,我们有一个使用嵌套数组建模的实体层次结构。我们使用领域驱动设计的原则(如Eric Evans所解释的)来实现这一点。我们电子商务领域的核心概念是: 有交易所的合同,每个都有服务和付款。反过来,服务具有描述每个服务的特性 这种层次模型使我们能够表达任何合同,无论多么复杂,包括作为整体协议(或合同)一部分的具有多个协议(即交换)的合同 Drools不支持这样的层次对象模型吗?我是否应该将对象模型反转为没有阵列的平面对象模型(如“火有房间”和“喷水装置有房间”),如下所示

在我们的电子商务领域中,我们有一个使用嵌套数组建模的实体层次结构。我们使用领域驱动设计的原则(如Eric Evans所解释的)来实现这一点。我们电子商务领域的核心概念是:

  • 有交易所的合同,每个都有服务和付款。反过来,服务具有描述每个服务的特性
这种层次模型使我们能够表达任何合同,无论多么复杂,包括作为整体协议(或合同)一部分的具有多个协议(即交换)的合同

Drools不支持这样的层次对象模型吗?我是否应该将对象模型反转为没有阵列的平面对象模型(如“火有房间”和“喷水装置有房间”),如下所示

  • 合同
  • 交易所,每个交易所都有一份合同
  • 服务和支付,每个都有一个单一的交换
  • 功能,每个功能都有一个单独的服务
以这种方式将层次对象模型转换为具有原子断言的平面对象模型,这是Drools中最受支持和最有效的方法,对吗?Drools似乎不支持在事实和子集合中的事实上使用LHS条件的规则


如果是这样,为什么Drools不支持更层次的对象模型?是因为Drools来自AI世界(不是面向对象的世界),在AI世界中,一阶逻辑将所有事实表示为原子主谓值语句,而不是实体对象具有标识、值对象不具有标识的面向对象世界,实体对象由其他实体和值对象组成?

您可以针对任何Java对象模型定义规则

该文档提供了基于玩具问题的示例,以避免从它所解释的内容中分心。并不是因为Drools无法处理更复杂的模型。如果您进一步阅读本手册,您将看到使用“contains”或累加器等语法处理列表的示例

这取决于你如何建模。您可以将合同、交易所、服务、付款和功能作为单独的事实插入,相互引用。或者,您可以插入一个复杂的合同事实,其中包含交换列表、服务列表等


哪个更适合您,取决于您的规则是否匹配具有很少链接的契约,或者您是否希望规则对某些事情做出反应,例如功能的更改或支付事实的插入。

支持对象上的嵌套访问器,因为Drools适用于任何Pojo。但是,嵌套访问器上没有反应

作为功能请求,可以通过插入侦听器开始添加嵌套的访问器反应。这是一件不平凡的工作,但它会非常有趣