把具有强关联性的业务逻辑放在一个模块叫功能性内聚,功能性内聚被认为是最佳实践。不论如何聚合,我们还是会看到很多对象会跟其他的对象发生关联,形成了一个复杂的关系网,不论是一对一、一对多还是多对多。来自模型的挑战常常不是让它们尽量完整,而是让它们尽量地简单和容易理解。这意味着,除非直到模型中嵌入了对领域的深层理解,否则大多数时候需要对模型中的关系进行消减和简化。 首先,要删除模型中非基本的关联关系。它们可能在领域中是存在的,但它们在我们的模型中不是必要的,所以我们要删除它们。其次,可以通过添加约束的方式来减少多重性。如果很多对象满足一种关系,那么在这个关系上加入正确的约束之后,很有可能只有一个对象会继续满足这种关系。第三,很多时候双向关联可以被转换成非双向的关联。
底层是细粒度的服务,上层聚合下层服务。当上层需要聚合的服务在多个模块(团队)时,我们还是本着领域划分的原则,谁的领域知识是最重要的或者说占比最多的,那么这个就该谁聚合。下面是主流的分层方案,供大家参考: