【DDD实战】在线请假和考勤管理


1 目的

通过一个简单的系统了解新系统从0到1的设计过程

2 功能描述

2.1 请假人在页面上【发起】请假申请,系统根据请假天数、请假类型等规则计算出审批人,生成审批流

2.2 审批人在页面上【通过】或者【拒绝】申请

2.3 考勤系统月底根据请假人当前月出勤天数、请假天数,输出考勤统计

3 战略设计

3.1产品愿景

  • 为了谁(服务对象):企业员工
  • 提供什么功能(服务内容):在线请假、审批、考勤

3.2场景分析

从用户角度分析用户需求

  • 请假

    • 用户登录系统
    • 进入请假模块
    • 创建请假单,选择请假类型、请假天数、上传证明材料
    • 提交
    • 撤回请假单
    • 编辑请假单
  • 审批

    • 审批人登录系统
    • 进入审批模块
    • 查看待审批列表
    • 选择一个请假审批流,查看请假信息,通过、驳回,填写意见
    • 发送通知
  • 考勤

3.3领域建模

根据系统功能以及涉及到的一些对象,画出关系图

1.找出领域实体和值对象

根据上图显示,实体和值对象有:人、请假单、审批流、审批节点、审批规则、审批意见、通知、考勤、部门、领导

2.找出聚合根

显然,上面这些实体和值对象可以分成三个域

  • 请假:请假单、审批流、审批节点、审批规则、审批意见、通知
  • 组织关系:人、领导、部门
  • 考勤:考勤

3.定义界限上下文

根据上面三个域,很明显我们可以将系统分成三个微服务

  • 请假微服务:负责请假申请、审批等相关内容
  • 用户管理:负责用户的注册、录入、登录&登出、编辑,部门等增删改查、添加人员,上下级关系维护,权限管理
  • 考勤:负责收集请假信息,分析用户考勤数据,展示统计结果等。

4 战术设计

梳理微服务内的领域对象,梳理领域对象之间的关系,确定它们在代码模型和分层架构中的位置,建立领域模型与微服务模型的映射关系,以及服务之间的依赖关系

一般分成三层:用户接口层、应用服务层、领域服务层。

4.1分析各个场景的架构

比如针对请假这个操作,架构可以如下:

审批操作,架构可以如下:

4.2设计代码结构

针对上述架构,代码结构很容易就设计出来了,如下:

5 后续工作

在完成领域模型和微服务设计后,我们还需要对微服务进行详细的设计。主要设计以下内容:实体属性、数据库表和字段、实体与数据库表映射、各层代码编写、对外接口设计、参数校验、权限校验、日志、监控、埋点、中间件等。

参考

[1]什么是DDD领域驱动设计?


文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录