问题描述
我有一个名为reward
的微服务。当客户在其他微服务中进行某项活动(花费了一定金额)时,该服务会发布一个事件,假设SpentRewardingMoney
。
在奖励服务中,我的总根为Customer
。
public class Customer: Entity,IAggregateRoot
{
// some properties
public List<CustomerReward> UserRewards { get; private set; } // rewards already given
}
现在在SpentRewardingMoneyConsumer
中,我必须奖励该客户。
问题是,为了简化起见,假设有一个表RewardRule
(奖励金额,奖励活跃等)来分发奖励。根据DDD规则,我必须将所有内容都拉到聚合根目录,但是此配置不是聚合根目录的一部分。
解决方法
可以从数据库或您使用的任何其他持久性中加载奖励。它将通过存储库加载。 问题的另一部分是:模型中的什么位置?
这取决于您的通用语言(UL)。 据我了解,这听起来像“奖励金额”和“激活奖励”都是Customer Reward对象的所有值。 (这是根据我对您的要求和UL的猜测得出的有根据的猜测。)
奖励也可以是它自己的汇总(也取决于UL)。在这种情况下,在相同上下文中聚合之间的通信是直接的。在这种情况下,您可以使用服务来简化交互。