专用名词

  • 具体类的相关设计

    实体

  • Entity

  • 有唯一标识(orderId),而且其他数据允许变化的

    值对象

  • ValueObject

  • 值绝对不会变化的类

    聚合

  • 根据class之间的关系,多个class聚合在一起,它们生命周期相同

  • 例如:

    1. publish class Order
    2. {
    3. private Long orderId;
    4. // 几十个order自己的字段
    5. // 。。。
    6. List<OrderItem> orderItemList;
    7. DeliveryAddress address;
    8. OrderStatus orderStatus;
    9. }

    充血模型

  • 贫血模型

    • 一个entity里只有数据库对应的几个字段,和一些setter和getter方法
  • 要在entity里填充一些有业务意义的行为和动作方法

    领域服务

  • 没有办法直接放在聚合里的一些行为,往往是针对多个聚合的业务行为

    业务组件

  • 比如订单的状态机:OrderStateMachine

    命令

  • 人发出的指令,数据修改command,数据查询query

  • 用来驱动我们领域服务的核心业务流程

    1. public class OrderService
    2. {
    3. public void placeOrder(PlaceOrderCommand command){
    4. // 使用聚合、领域服务、业务组件,完成这个指令
    5. }
    6. }

    领域事件

  • 比如用户支付订单后,订单服务发出一个订单支付成功的事件,其他服务监听到这个事件后,做一些事情

    仓储repository

  • 用来把聚合数据、实体和持久层进行交互;实现具体聚合的持久化和读取

  • 如果数据底层使用到了nosql、缓存、es、MQ这些,都是封装在repository中

    最终目标

  • 聚合(数据+行为)+ 领域服务 + 业务组件 => 还原出业务流程

  • PM可以根据代码的英文和注释,读懂你的业务流程,并且和他心里的业务流程基本一致