领域驱动模型设计(DDD(Domain-Driven|领域驱动模型设计(DDD:Domain-Driven Design))
【领域驱动模型设计(DDD(Domain-Driven|领域驱动模型设计(DDD:Domain-Driven Design))】参考:https://zhuanlan.zhihu.com/p/101592594
领域驱动模型设计(DDD:Domain-Driven Design)
边界是核心
核心思想:对边界的划分与控制
问题空间
- 第一重边界:
目标(WHY):为了解决问题
聚焦(WHAT):划定问题空间(确定核心子领域、通用子领域与支撑子领域)
HOW:确定项目的愿景与目标
- 第二重边界:
目标(WHY):为了边界内外可以形成两个不同的世界
聚焦(WHAT):限界上下文
HOW:外部世界的规则是契约、通信以及系统级别的架构风格与模式,内部世界的规则是分层、协作以及类级别的设计风格与模式
- 第三重边界:
目标(WHY):为了隔离业务复杂度与技术复杂度
聚焦(WHAT):基础设施层、应用层与领域层之间的隔离
HOW:将领域层作为整个系统稳定而内聚的核心,是领域驱动设计的关键特征,即分离变与不变
- 第四重边界:
目标(WHY):为了维持领域模型绝对的稳定性
聚焦(WHAT):聚合
HOW:聚合设计原则要求聚合之间通过ID进行关联
文章图片
image 具体实施:
- 三大纪律
- 领域专家与开发团队工作在一起
- 领域模型必须遵循统一语言
- 时刻坚守四重设计边界
- 八项注意
- 子领域与限界上下文不要混为一谈
- 一个限界上下文不能由多个团队开发
- 跨进程协作通过远程服务,进程内协作通过应用服务
- 保证领域分析模型、领域设计模型与领域实现模型的一致
- 不要将领域模型暴露在应用层之外
- 不要让数据模型干扰领域模型的设计
- 聚合之间只能通过聚合根ID引用
- 聚合不能依赖访问外部资源的网关
领域是应用程序化的对象领域(例如:在库管理)。在域驱动设计中,主要前提是【应用程序的本质是领域】。聚焦在领域内而不是领域外的对象。
“领域模型”的对象模型在领域驱动设计中起着重要的作用。领域模型是领域中存在的概念的抽象(例如:库存管理中“仓库”或“移动”)。领域模型是对象的集合。领域中存在的所有基本行为(业务逻辑)都被建模成领域模型的职责。更具体地说,将所有行为建模成一个对象的责任或多个对象的交互。在领域驱动设计中,领域模型是应用程序开发的起点和基础。
【基本准则】
- 领域是应用程序的本质
- 使用从领域知识派生的通用语言;普遍存在的语言是目标领域中使用的术语的集合,为了消除歧义和重复。
- 使用通用语言进行团队交流,文档书写,领域模型类和方法名称,服务名称等的定义。
- 迭代开发的同时,保持领域模型,使通用语言和实现之间的一致性和可追溯性成为可能。
- 灵活运用模型驱动开发,面向对象技术,敏捷开发方法。然而不会像分析模型、设计模型那样,分离模型。使用一个模型。
一言以蔽之,所谓领域驱动模型就是聚焦【领域中心】的面向对象的开发方法。
- 基本上是面向对象的。
- 迭代流是模型驱动的。
- 开发过程是一种敏捷方法。
但是,如果没有这三种技能,并不是不能开始。领域驱动设计使用迭代型方式进行实践。关于这三种技能,我认为通过这种重复来提高技能也不错。
借助https://www.wps.de/modeler/来划分领域
推荐阅读
- 两感一练
- GIS跨界融合赋能多领域技术升级,江淮大地新应用成果喜人
- 21天|21天|羊多多组合《书都不会读,你还想成功》
- Flutter的ListView
- 一般模型化关系——从模型是什么到如何起作用的基本答案
- 工业推荐领域与学术领域研究的方向差异
- 国家重点支持的高新技术领域(一)
- Spring注解驱动第十讲--@Autowired使用
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- 旅途碎碎念