Skip to main content

领域驱动开发

细分项目层次结构, 是 MVC 的升级版

1.1. 控制层 1.1.1. 职责 协议转换

WebSOCKET, HTTP, RPC 等请求统一处理 举例: HTTP 携带 token 区分身份 WebSOCKET 在连接组中取得身份 RPC 连接时已有身份 OpenAPI 请求 APPID 区分身份 接口转换

处理参数为应用层可以接收的格式

参数校验处理

校验应用层需要的参数格式,并返回相应错误 举例: 从请求体中读参数: HTTP Request WebSOCKET content RPC Request OpenAPI parse request body 对请求参数进行校验 校验订单号 校验收款账号等 调用应用层服务 响应处理

对于不同的协议,将应用层返回的数据处理成统一格式返回 举例 得到应用层返回数据进行处理返回: HTTP response body WebSOCKET write RPC write OpoenAPI response body 1.2. 应用层 流程编排

将一件事情按照 step 分为多步, 调用领域层的服务来完成业务 举例 检查订单是否可以创建 检查用户余额 计算服务费用 锁定用户余额 订单入库 事务控制

数据库事务只会在这一层开启结束 举例 可以整个流程一个事务,也可以细分步骤来开启提交事务 1.3. 领域层 核心业务逻辑

单个 step 实现任务

不依赖其它层

不依赖上层也不依赖下层,可以独立运行测试

1.4. 子域层 领域层拆分出来的通用服务

上层领域层的复用功能提取, 更少的业务,更多的技术

1.5. 基础层 只做技术相关

业务无关的服务/可直接复用到其它项目中

1.6. 仓库层 数据仓库

业务层-仓库层-实体层, 查询操作交给 Repository 来进行

1.7. 实体层 数据对象

ORM Model, 将面向对象编程贯彻到位

对象数据判断

做基础数据判断,避免 $order->status == 1 这样不易读的代码