Oop 考虑典型的订单/订单行DDD实现。如何获得产品总销售额?

Oop 考虑典型的订单/订单行DDD实现。如何获得产品总销售额?,oop,architecture,domain-driven-design,Oop,Architecture,Domain Driven Design,假设订单的典型模型: 订单(aggregateRoot){OrderLine} 订单行(entityInsideOrderAR){产品;数量} 产品(聚合对象){name} 这是一个恰当的会计设计吗?我的意思是,calculateTotalProductSales()应该驻留在哪里?引用应该是非循环的,所以如果产品应该有OrderCollection,这将不是一个好的设计。即使对于产品的特殊聚合子级,ProductHistory也应该引用Order,并且再次有一个对象被多次加载(循环引用) 对于

假设订单的典型模型:

订单(aggregateRoot){OrderLine} 订单行(entityInsideOrderAR){产品;数量} 产品(聚合对象){name}

这是一个恰当的会计设计吗?我的意思是,calculateTotalProductSales()应该驻留在哪里?引用应该是非循环的,所以如果产品应该有OrderCollection,这将不是一个好的设计。即使对于产品的特殊聚合子级,ProductHistory也应该引用Order,并且再次有一个对象被多次加载(循环引用)

对于这个案例,什么样的设计才是好的?基本上我需要做一些基于产品销售的计算(countTotalSalesForProduct(),calculateTotalSalesForProduct()等等…一些简单的会计计算)


附言:将订单线向上移动一个级别并使其成为自己的AR是一个好主意吗?

可以将会计功能拆分为一个特定的范围。可以在不破坏现有订购上下文的情况下开发一组专用模型。此外,现实中有很多订单信息是会计领域不需要的(如发货地址、备注等)。报表和统计信息也是会计领域的常见需求,这使得“一刀切”领域模型解决方案变得更糟。它们可能被实现为复杂的SQL,难以测试和维护,或者导致域逻辑泄漏到基础架构层


使用域事件集成两个有界上下文可能是一个好主意。您可以参考,其中Martin Fowler建议使用事件触发记帐流程。

可以将记帐功能拆分为一个速度受限的上下文。可以在不破坏现有订购上下文的情况下开发一组专用模型。此外,现实中有很多订单信息是会计领域不需要的(如发货地址、备注等)。报表和统计信息也是会计领域的常见需求,这使得“一刀切”领域模型解决方案变得更糟。它们可能被实现为复杂的SQL,难以测试和维护,或者导致域逻辑泄漏到基础架构层


使用域事件集成两个有界上下文可能是一个好主意。您可以参考,其中Martin Fowler建议使用事件触发记帐流程。

可以将记帐功能拆分为一个速度受限的上下文。可以在不破坏现有订购上下文的情况下开发一组专用模型。此外,现实中有很多订单信息是会计领域不需要的(如发货地址、备注等)。报表和统计信息也是会计领域的常见需求,这使得“一刀切”领域模型解决方案变得更糟。它们可能被实现为复杂的SQL,难以测试和维护,或者导致域逻辑泄漏到基础架构层


使用域事件集成两个有界上下文可能是一个好主意。您可以参考,其中Martin Fowler建议使用事件触发记帐流程。

可以将记帐功能拆分为一个速度受限的上下文。可以在不破坏现有订购上下文的情况下开发一组专用模型。此外,现实中有很多订单信息是会计领域不需要的(如发货地址、备注等)。报表和统计信息也是会计领域的常见需求,这使得“一刀切”领域模型解决方案变得更糟。它们可能被实现为复杂的SQL,难以测试和维护,或者导致域逻辑泄漏到基础架构层


使用域事件集成两个有界上下文可能是一个好主意。您可以参考Martin Fowler在其中建议使用事件触发记帐流程。

您可能应该研究这种模式。您以两种方式使用域对象。除非从数据库中获取所有订单并在某个循环中遍历它们,否则无法获得所有产品销售。那会很慢。这就是为什么报告通常是在另一个有限的环境中完成的,正如希普姆所建议的那样。读一读。

你可能应该研究一下这个模式。您以两种方式使用域对象。除非从数据库中获取所有订单并在某个循环中遍历它们,否则无法获得所有产品销售。那会很慢。这就是为什么报告通常是在另一个有限的环境中完成的,正如希普姆所建议的那样。读一读。

你可能应该研究一下这个模式。您以两种方式使用域对象。除非从数据库中获取所有订单并在某个循环中遍历它们,否则无法获得所有产品销售。那会很慢。这就是为什么报告通常是在另一个有限的环境中完成的,正如希普姆所建议的那样。读一读。

你可能应该研究一下这个模式。您以两种方式使用域对象。除非从数据库中获取所有订单并在某个循环中遍历它们,否则无法获得所有产品销售。那会很慢。这就是为什么报告通常是在另一个有限的环境中完成的,正如希普姆所建议的那样。阅读。

我不明白为什么我不应该在考虑与产品本身(产品历史)密切相关的产品时中断订单。仅使用sql意味着将逻辑移到域之外,这不是一个好主意。产品的核算与产品本身(它的销售HiMotory)有关,我不明白为什么要将其转移到另一个上下文,它依赖于这个聚合根。@GeoC。该产品是一个业务概念,可以在不同的有界上下文中映射到不同的领域模型(甚至不基于ddd)。不同的有界上下文有不同的需求,这使得开发通用域变得非常困难