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