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