DDD是架构设计的一种方法论,在2004年埃里克·埃文斯(Eric Evans)发表了《领域驱动设计》,DDD一直不温不火, 随着微服务的兴起,DDD找到用武之地。
DDD 核心思想是通过领域驱动设计方法定义领域模型,从而确定业务和应用边界,保证业务模型与代码模型的一致性。
战略设计和战术设计
微服务时代我也学习过DDD,但是主要关注在战术设计上,即聚合根、实体、值对象、领域对象等,但是学习完成以后感觉比较难用,纠结与概念,不好用,不久就丢弃了。
微服务后,DDD的理论明确提到战略设计和战术设计,这一切就迎刃而解了。
- 战略设计,从业务角度出发,建立业务领域模型,划分领域边界,建立通用语言上下文。
- 战术设计,从技术角度出发,侧重于领域模型的实现,完成软件的开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。
事件风暴
- 确定领域模型一般使用事件风暴,首先根据事件风暴梳理业务过程中的用户操作、事件以及外部领域。
- 根据实体的业务领域关系,将业务领域相关的实体组合成聚合,同时确定聚合根,聚合对象、实体对象。
- 根据业务以及语义边界因素,将一个或者多个聚合划分在一个界限上下文,形成领域模型。
DDD和微服务
DDD是一种架构设计方法,而微服务是架构设计风格,两者从本质上都是为了追求高响应力,而从业务角度去分离应用系统建设复杂度。
DDD主要关注从业务领域视角划分领域边界,构建通用语言进行高效沟通,通过业务抽象,建立领域模型,维持业务和代码模型的一致性。
微服务关注服务治理、服务通信、容错、Devops,让开发人员将注意力集中在业务上。
小结
这是DDD的一些基本概念,特别是战略设计和战术设计要理解清楚,不要把精力都放在战术设计上,虽然战术设计是和代码一一对应。
网友评论