【发布时间】:2016-02-12 12:07:01
【问题描述】:
我正在成为DDD 的忠实粉丝。所以,我正在考虑将其正确应用到我当前开发的系统中。
假设我们有两个聚合根:Order 和 User。 Order 有两个属性,引用User:owner 和contractor。所有者创建了一个Order,承包商完成了它。
业主可以评价承包商履行Order 的质量。所以我们有一个Feedback 实体,连接到Order,包含评级。
现在,User 对象包含每个用户在他履行的订单中的平均评分。这部分让我有点困惑。
User 评分不仅仅是一个静态属性,实际上是Feedbacks 中所有评分的平均值。并且在Order 附加了Feedback 时,它已更改(需要重新计算)。
目前我有一些封装域逻辑的服务:OrderService 和UserService(我知道这实际上不符合 DDD,但我稍后会重构)。当 OrderService 接收到将反馈附加到订单的命令时,它会发出 OrderFeedbackAttachedEvent UserService 监听以重新计算用户评分。
令我不满意的是,关于 Order 聚合根的知识现在泄露到了 UserService 中。而且我看不到逃脱它的方法。我开始认为应该有一些模式来处理这种情况。
评分似乎是用户的完美属性。但它不是一个静态的、持久的值,而是基于其他对象数据计算的某种东西,这一事实让我怀疑。
评级本身也不是一个实体。它也不是一个值对象。我想知道,在 DDD 中它是什么?以及如何在不牺牲性能和易用性的情况下对系统中的评分(或任何其他可计算值)进行建模)?
【问题讨论】:
-
@plalx 我担心的是,在给出反馈后,必须汇总所有反馈来计算用户评分。这会创建从用户到订单的依赖关系(当事件被捕获时,调用订单存储库以从用户服务获取评级)。这样可以吗,你怎么看?
标签: design-patterns architecture domain-driven-design