聚合根、聚合、实体、值 Objects

Aggreate Root, Aggregates, Entities, Value Objects

在查看上面标题中提到的术语时,我正在为一些实现细节而苦苦挣扎。

谁能告诉我我的解释是否正确?

作为参考,我查看了一个 CRM 域

作为 AggregateRoot,我可以看到 Customer

它可能有 实体,例如 地址,其中包含街道、邮政编码等。

现在有像 ContactActivity 这样的东西,这应该至少是 aggregates。正确的?现在,如果联系人和活动具有复杂的业务逻辑。例如,"Every time a contact of the type order is created, the order workflow should be started"

Contact 是否需要成为聚合根?这可能对实施产生什么影响?

更进一步,在查找和事件溯源时,每个聚合都会有自己的流吗?在这种情况下,客户可能有数千个活动。

如果有人能指导他们,我的理解在哪些部分是正确的,在哪些部分与一般解释不同,那就太好了。

“至少聚合”是什么意思?

聚合是一组一个或多个连接的实体。只能从其根实体(也称为聚合根)访问聚合。聚合定义了必须始终保留的实体的事务边界。 Jimmy Bogard 对聚合有很好的解释 here

使用事件溯源时,每个聚合都应该有自己的流。流用于构建聚合,没有理由让多个聚合使用相同的流。

您应该尽量保持较小的聚合。如果您希望您的客户对象有数千个活动,那么您应该考虑是否可以将这些活动设计为单独的聚合,只要它的边界确保您不会使系统处于无效状态。