我正在开展一个侧面项目,在“每日交易”域中学习和应用DDD。在我的购买环境中,我有一个不变量,用户每笔交易只能购买'x'的交易量。
因此,我的交易聚合加载所有用户的所有购买只是为了检查并查看用户购买此交易的次数(如果有的话)似乎是浪费。我看到了两种可以解决这个问题的方法。
将此逻辑放在域服务中,这将允许在调用Deal聚合的Purchase方法时满足前提条件。
我的存储库实施总是可以为购买用户填充交易的购买集合。嗯...不确定这个。
任何指导都会很棒!
答案 0 :(得分:2)
我会采取第二种方法,但有一个重要的变化。我会创建一个名为PurchasedDeal的值对象,它只包含一个DealID和Quantity字段。用户聚合可以改为加载这个更轻量级的购买历史对象的集合。这种方法的表现应该很好,因为我猜测普通用户只会有几十个购买记录。
还要记住,使用DDD,您可以并且可能应该在每个有界上下文中使用不同的模型。因此,您可以在交易/购买的上下文中设计这样的用户聚合。但是,如果不需要,则您在另一个上下文中的用户聚合看起来会有所不同,并且没有购买历史记录。