DDD是什么?
DDD是一种软件设计思想(不是程序设计思想),主要用来解决软件复杂度的问题。
DDD为什么能解决软件复杂度?
对于规模造成的复杂度,可以借助限界上下文进行分而治之; 对于结构造成的复杂度,可以借助分层架构进行层次梳理,每层的关注点分离。 对于变化造成的复杂度,以领域为核心,帮助我们尽早的识别变化,通过高内聚低耦合的设计,来提高程序的扩展性。
DDD怎么拆分领域
一、核心原则
-
业务驱动,而非技术驱动:划分的依据应是业务能力和业务需求,而非技术实现(如数据库结构或API层)。确保每个领域对应一个明确的业务问题或业务能力
。
-
高内聚,低耦合:
-
高内聚:将业务关联紧密的概念、规则和流程放在同一个领域内。例如,订单的创建、支付、履约逻辑应内聚在“订单域”
。
-
低耦合:不同领域之间通过明确的接口进行协作,避免直接依赖对方的内部实现或数据库。领域间的依赖应尽量减少,并通过限界上下文(Bounded Context) 严格界定边界
。
-
-
边界清晰:每个领域都应有其明确的职责范围,避免模糊不清的职责重叠。一个业务操作不应无序地跨越多个领域
DDD是如何解决复杂度的问题?
分为战略和战术。
战略
1.定义限界上下文,将复杂系统拆分为不同的限界上下文,分而治之,大白话就是拆分为分布式系统;
2.定义限界上下文和领域的映射,大白话就是确定每个系统负责哪些业务(领域),系统间如何交互,设计防腐层;
3.通用语言的定义
战术
1.领域专家获取领域知识,从而建立软件中的模型,模型跟领域应该是映射关系
让模型植根于领域、并精确反映出领域中的基础概念是建立模型的一个最重要的基础。
大白话:跟业务或产品沟通,从而建立领域模型。
2.通用语言,在当前限定上下文内建立领域语言和开发语言的统一语言。
举例: 转代收付/修改鉴证关系->变更收款方; 账单->还款计划
3.模型驱动设计,这一步是将通过领域知识建立的领域模型转换为代码实现。
具体有分层架构:
分层架构
六边形架构,洋葱架构,整洁架构
blog.csdn.net/luo15242208…