首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >考虑到典型的订单/订单行DDD实现。如何获得产品的总销售额?

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

Stack Overflow用户
提问于 2014-02-20 08:52:41
回答 2查看 598关注 0票数 0

假设订单有一个典型的模型:

订单(aggregateRoot) { OrderLine } OrderLine (entityInsideOrderAR) {产品;数量}产品(AggregateRoot){名称}

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

对于这种情况,什么是一个好的设计?基本上我需要做一些基于产品销售额的计算(countTotalSalesForProduct(),calculateTotalSalesForProduct()等)。一些简单的会计计算)。

附言:将OrderLine提升一级并使其成为AR是一个好的想法吗?

EN

回答 2

Stack Overflow用户

发布于 2014-02-20 09:10:54

人们可以将会计功能拆分成一个高级的有界上下文。可以在不破坏现有排序上下文的情况下开发一组独占模型。此外,现实中有很多订单信息对于会计领域来说是不必要的(如发货地址、备注等)。报告和统计也是会计领域的常见需求,这使得一刀切的领域模型解决方案变得更糟糕。它们可能被实现为难以测试和维护的复杂SQL,或者导致域逻辑泄漏到基础架构层。

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

票数 2
EN

Stack Overflow用户

发布于 2014-02-20 16:21:24

为此,您可能应该研究一下CQRS模式。您以两种方式使用域对象。除非您从数据库中获取所有订单并在某个循环中遍历它们,否则您无法获得所有的Product sales。这将是,嗯,很慢。这就是为什么报告通常是在另一个有界的上下文中完成的,正如Hippoom建议的那样。读一读吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21895909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档