在哪里放置这个不变量?

Where to place this invariant?

我正在做一个副项目,在“每日交易”领域学习和应用 DDD。在我的采购环境中,我有一个不变的条件,即用户每次只能购买 'x' 数量的交易交易。

所以我的交易汇总加载所有用户的所有购买只是为了检查和查看用户购买此交易的次数(如果有的话)似乎很浪费。我看到了两种解决方法。

  1. 将此逻辑放在域服务中,这将允许在调用 Deal 聚合上的 Purchase 方法时满足先决条件。

  2. 我的存储库实现始终可以为购买用户填充交易的购买集合。嗯...不确定这个。

任何指导都会很棒!

我会采用第二种方法,但有一个重要的变化。相反,我会创建一个名为 PurchasedDeal 的值对象,它仅包含一个 DealID 和 Quantity 字段。用户聚合可以改为加载这个更轻量级的购买历史对象的集合。这种方法的性能应该不错,因为我猜一般用户只有几十条购买记录。

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