域驱动设计 – 在哪里放置这个不变量?

我正在开展一个侧面项目,在“每日交易”域中学习和应用DDD.在我的购买环境中,我有一个不变量,用户每次交易只能购买’x’的交易金额.

因此,我的交易聚合加载所有用户的所有购买只是为了检查并查看用户购买此交易的次数(如果有的话)似乎是浪费.我看到两种方式可以解决这个问题.

>将此逻辑放在域服务中,这将允许在调用Deal聚合上的Purchase方法时已满足前置条件.
>我的存储库实现总是可以为购买用户填充交易的购买集合.嗯…不确定这个.

任何指导都会很棒!

最佳答案 我会采取第二种方法,但有一个重要的变化.我会创建一个名为PurchasedDeal的值对象,它只包含一个DealID和Quantity字段.用户聚合可以改为加载这个更轻量级的购买历史对象的集合.这种方法的性能应该很好,因为我猜测普通用户只会有几十个购买记录.

还要记住,对于DDD,您可以并且可能应该在每个有界上下文中具有不同的模型.因此,您可以在交易/购买的上下文中设计这样的用户聚合.但是,如果不需要,您在另一个上下文中的用户聚合看起来会有所不同,并且没有购买历史记录.

点赞