有关聚合的详细信息以及在何处使用聚合

Details about Aggregates and where to use Aggregates

我在 youtube 上阅读了很多关于聚合的文章和视频,但每次我都对它们越来越困惑。所以请结合具体例子详细描述。我对此知之甚少,因为它是一个集合,它可以用于 DDD(领域驱动设计)模式和识别微服务边界。如果我错了,请纠正我并描述更多关于聚合的信息。

提前致谢。

An AGGREGATE is a cluster of associated objects that we treat as a unit for the purpose of data changes. -- Evans, 2003.

聚合是一种模式,Evans 在蓝皮书的生命周期管理一章中对此进行了描述。

动机是我们经常有两个或多个域实体,它们必须始终以某种方式彼此一致。这通常意味着我们希望将它们保存在一起(否则,一次糟糕的失败可能会使我们处于实体彼此不一致的状态),并且通常意味着我们希望在任何情况下都可以使用两个实体我们可能会更改一个(因为我们需要确保更改与另一个一致)。

另请参阅:Coarse Grained Lock


一个有点做作的例子:

想象一个跟踪某些商品出价的系统。我们的实体可能包括一组买入订单(每个订单都有一个价格和金额),以及一组类似的卖出订单。

我们的工作是将彼此接近且时间接近且价格相同的买入和卖出订单配对。因此,当收到新的买入订单时,要么将其添加到买入订单集合中,要么将其与卖出订单相匹配,卖出订单将从卖出集合中移除。

实际上,这两个集合的管理方式使其永不重叠。为确保 属性 成立,我们将两个集合保存在同一个“聚合”中,以便它们始终作为一个单元保存,并且我们免受可能使两个实体彼此不一致的数据竞争的影响。

通常,这会限制我们的数据模型 - 例如,如果我们使用文档存储来保存我们的域信息,那么这两个实体将在同一个“文档”中表示。