知识卡片
服务识别从命令出发:自上而下反推应用服务、领域服务、实体方法
内容
微服务战术设计阶段,面对领域模型里一堆带着业务语言、还没落到具体代码结构的领域对象,一个具体可操作的服务识别起点是”命令”——命令通常是外部操作触发的业务行为,往往直接对应微服务对外提供的服务能力。具体识别步骤是自上而下的四步:第一步,因为应用服务主要面向用例,先根据命令设计应用服务,确定它该由哪些服务组合编排而成(这些服务主要来自领域层的领域服务,或其他微服务的应用服务);第二步,根据应用服务的功能要求反推出需要哪些领域服务;第三步,根据领域服务的功能确定它内部要用到哪些实体、以及实体自身该有哪些业务行为(这一步要留意不要滥用领域服务,避免把本该属于单个实体的行为也塞进领域服务,导致实体变成贫血模型);第四步,设计实体的具体属性和方法。书中以”提交审批”这个命令为例完整演示了这个反推过程:从命令出发先定位到”提交审批应用服务”,再反推出”查询审批规则”“修改请假流程信息”“根据审批规则查询审批人”三个领域服务,最后精确定位到请假单实体的”修改请假流程信息”方法、审批规则值对象的”查询审批规则”方法、人员实体的”根据审批规则查询审批人”方法。这条”从命令自上而下反推”的路径,把原本抽象的”该怎么设计服务”问题,转化成了一条可以逐步执行的具体分析流程。
参考来源
- 位置:《中台架构与实现:基于DDD和微服务》第18章《基于DDD的微服务设计实例》"18.3.1 分析微服务领域对象","1. 服务识别和设计"(源文件:_epub-src/OEBPS/Text/chapter4-7-3-1.xhtml)
- 结论依据:原文说明"我们可以将命令作为服务识别和设计的起点……1)由于应用服务主要面向用例,我们可以先根据命令设计应用服务……2)根据应用服务功能要求设计领域服务……3)根据领域服务的功能,确定领域服务内的实体以及实体自身的业务行为……4)设计实体基本属性和方法",并以"提交审批"命令为例完整演示,直接支撑本卡片结论。
- 原始内容:我们可以将命令作为服务识别和设计的起点,服务识别和设计的具体步骤如下:1)由于应用服务主要面向用例,我们可以先根据命令设计应用服务……2)根据应用服务功能要求设计领域服务,定义领域服务……3)根据领域服务的功能,确定领域服务内的实体以及实体自身的业务行为……4)设计实体基本属性和方法。