知识卡片
领域服务下沉合并:从被重复组合的模式中提炼新领域服务
内容
在严格分层架构下,实体的方法被领域服务组合封装,领域服务又被应用服务组合封装,服务是逐层组合上去的。设计一个领域服务时,往往无法预测它未来会被多少个上层应用服务组装调用。书中描述了一个真实会发生的演进现象:随着系统功能增强、外部接入渠道越来越多,某一天你会发现领域服务b和c,同时被应用层的应用服务A和B多次组装调用,而且它们在A和B里的业务执行逻辑基本一致——这时就可以考虑把领域服务b和c的功能合并,把合并后的能力下沉到领域层,形成一个新的领域服务(b+c)。这样做的好处有两个:一是减少了领域服务的总数量,二是降低了上层应用服务组合编排的复杂度。这个案例给出一条通用的架构演进信号:当你观察到多个上层调用方在反复用同一种组合方式拼接几个底层服务、且这种拼接逻辑本身趋于一致时,这其实是一个提示——这个被反复拼接的组合,本身应该被提炼成一个更底层、更贴近领域本质的能力单元,而不是让每个上层调用方各自维护一份相同的组合逻辑。
参考来源
- 位置:第10章《DDD分层架构》"10.2.2 微服务内服务的演进"(源文件:_epub-src/OEBPS/Text/chapter3-6-2-2.xhtml)
- 结论依据:原文说明"有一天你发现领域服务b和c同时多次被应用层的应用服务A和B组装和调用了,在A和B内它们的业务执行逻辑也基本一致。这时你就可以考虑将领域服务b和c的功能合并,并将合并后的功能下沉到领域层,演进为新的领域服务(b+c)。这样既减少了领域服务的数量,又降低了上层应用服务组合和编排的复杂度",直接支撑本卡片结论。
- 原始内容:有一天你发现领域服务b和c同时多次被应用层的应用服务A和B组装和调用了,在A和B内它们的业务执行逻辑也基本一致。这时你就可以考虑将领域服务b和c的功能合并,并将合并后的功能下沉到领域层,演进为新的领域服务(b+c)。