DDD个人主要理解

  1. 它微服务的设计思想
  2. 主要由子域与边界上下文组成
    子域:领域驱动为每一个子域设计独立的领域模型,每一个子对应着一个业务
    边界上下文:子域的边界
  3. 它是对面向对象设计的增强
  4. 与数据驱动的区别
    数据驱动:我们传统的代码架构是dao、service、controller三层组成,大多数的业务本质是对数据库表的增删改查(比如开发一个简单用户注册系统)
    数据驱动的痛点:
    (1) 存在接口定义不狗清晰(参数定义不够清晰,比如都用string类型去接收)
    (2) 存在业务代码不够清晰(比如核心业务代码中存在非业务的胶水代码,诸如参数的校验)
    (3) 可测试性比较复杂,(业务不够清晰导致,如果把参数校验等非业务代码放在业务方法中,那么每次都要测试,无法分开单独测试)
  5. 什么是领域驱动中的业务,业务是指流程的流转,按照流程来区分边界上下文
  6. DP:Domain Primitive 是领域驱动中模型、方法、架构的基础,不可或缺。是具有精准定义、自我校验、拥有行为的value object。
  7. DDD是对面向对象的增强,DP是对VO的增强,对之增加了对业务校验与业务行为
    8.DP具有不可变性,这个业务数据一旦被创建即不可被修改

老应用的DDD重构流程

  1. 创建Domain Primitive 对象,收集所有的DP行为:
    将之前散落在各个服务或者工具类中的代码,都抽取出来放在DP中,原则是所有抽取出来的方法要求是无状态,如果是有状态,需要把有状态与无状态的剥离,将无状态的放入DP中,因为DP本身是不可变滴。
  2. 替换数据校验或者无状态的逻辑
  3. 创建新接口
  4. 修改外部调用