目录
1、案例业务功能
1、【请假】请假人填写请假单提交审核,逐级提交审批,不通过则退回至申请人
2、【考勤】核销请假数据后,对考勤数据进行统计
2、战略设计
分析场景(事件风暴)->提取领域模型和聚合根->把实体和值对象聚合成聚合->划分限界上下文
事件风暴方法:参与者把各自意见写在贴纸上,然后大家对意见展开讨论,最后收敛和统一,形成产品愿景图。
2.1、场景分析
以请假为例分析
场景1:请假
用户:请假人
1)请假人登录系统,输入信息完成认证
2)请假人打开请假页面,填写请假单保存,提交审批
3)请假人修改请假单,打开页面,修改,保存提交
场景2:审核
用户:审核人
1)审核人登录系统,输入信息完成认证
2)获取请假单,查看待办
3)填写审批意见
4)完成审批
2.2、领域建模
领域建模是一个收敛过程,分三步:
1)提取领域对象
通过分析出领域对象:请假单、审批意见、人员、组织关系等
2)构建对象
先找聚合根:请假单、人员具有聚合根的特性(独立的生命周期、全局唯一的ID、可以创建修改其他对象)
然后找聚合根关联的实体和值对象:审批意见和请假单这个聚合根紧密关联;组织关系和人员这个聚合根紧密关联
最后刷卡明细、考勤明细、这几个实体没有聚合根,我们就把这几个聚合紧密的实体放在一个考勤聚合里面
图如下:
3)划分限界上线文
我们发现人员聚合和请假聚合共同完成请假的业务,所以这两个就形成了请假限界上下文,而考勤聚合单独的形成考勤限界上下文,见上图
到目前位置我们就建立了考勤和请假两个领域模型
理论上讲一个限界上线文就可以设计成一个微服务
3、战术设计
战术设计就是根据领域模型完成微服务设计的过程。分两个阶段:分析微服务领域对象和设计微服务代码
3.1、服务的识别和设计
分析【提交审核】的流程:
1)根据人员类型、审核规则等,获取下一个审核人的角色
2)根据审批人的角色获取1)中下一审批人
3)为1)中的审批人分配审核人
通过分析我们可以在应用层和领域层设计以下服务和方法:
应用层:提交审核应用服务
领域层:查询审批规则、根据规则查询审批人、修改请假流程信息。涉及到请假和人员两个聚合
3.2、聚合内的对象
实体:
请假单是聚合根,会有多条审批意见,审批意见就可以设计为实体。另外,审批通过后会产生【请假单已通过】的领域事件,即请假单通过实体。
值对象:
审批数据来源于人员聚合中的人员实体,这个实体可设计为值对象。人员类型、请假类型等枚举也可以设计为值对象。
所以,请假和人员的领域对象依赖图如下: