1. 领域驱动开发

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

1.1. 控制层

1.1.1. 职责

  1. 协议转换

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

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

  2. 参数校验处理

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

    • 对于不同的协议,将应用层返回的数据处理成统一格式返回
    • 举例
      • 得到应用层返回数据进行处理返回:
        1. HTTP response body
        2. WebSOCKET write
        3. RPC write
        4. OpoenAPI response body

1.2. 应用层

  1. 流程编排

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

    • 数据库事务只会在这一层开启结束
    • 举例
      • 可以整个流程一个事务,也可以细分步骤来开启提交事务

1.3. 领域层

  1. 核心业务逻辑

    单个 step 实现任务

  2. 不依赖其它层

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

1.4. 子域层

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

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

1.5. 基础层

  1. 只做技术相关

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

1.6. 仓库层

  1. 数据仓库

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

1.7. 实体层

  1. 数据对象

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

  2. 对象数据判断

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

results matching ""

    No results matching ""