应用服务:可以理解为科室A。
聚合:可以理解为小组。聚合1(小组1)、聚合2(小组2)、聚合3(小组3)。
组长是聚合根实体,组员是实体。
和其他聚合交流(调用),要先通过组长(聚合根实体),组长来找到组员(一般实体)。
每个组员可以自己提供领域服务,也可以和其他组员合作领域服务(跨实体领域服务)。
尽量不要跨聚合。比如小组1的组员和小组2的组员合作提供领域服务1,这样会导致聚合1(小组1)、聚合2(小组2)产生耦合。
比如在领域服务1中,小组1组员和小组2组员产生了联系,小组1组员改动,小组2组员就也要改,小组2聚合就要改。这就耦合了,不太好。
每个小组(聚合)分别提供自己领域的若干领域服务,科室A(应用服务)来组合编排,形成科室A的微服务,对外提供。
科室A(应用服务)可以跨小组(聚合)编排领域服务。
科室A就是一个包含三个聚合(三个小组)的限界上下文。在科室A内部,用同一种业务语言沟通。科室A作为应用服务,组合三个小组的领域服务,向外提供科室A微服务。
等有一天,小组1觉得需要独立了,就把聚合1拆出来,作为独立的限界上下文,形成另一个微服务。这个微服务的领域层只有聚合1一个聚合。
所以聚合是DDD中,可以说最重要的概念。
聚合是可以单独拆出来,成一个独立的领域模型(领域层),然后结合通用的用户接口层、基础层、应用层,成为一个可以独立部署的微服务(软件包)的。