当前位置: 首页 > news >正文

DDD之整体设计流程(2)

一、发展史

DDD 的发展历程

  • 领域建模的萌芽(20 世纪 70-90 年代):软件工程和面向对象编程兴起,开发人员开始通过类和对象来抽象和表示现实世界的业务领域。1997 年统一建模语言(UML)诞生,为领域建模提供了标准化工具和图示方法。
  • 领域驱动设计的提出(2003 年):Eric Evans 出版《领域驱动设计:软件核心复杂性应对之道》,提出 DDD 核心思想,奠定了现代领域建模的理论基础。
  • 领域驱动设计的推广和实践(2000 年代中后期):Vaughn Vernon 等扩展实践者通过书籍和文章进一步推广 DDD。2013 年,Vaughn Vernon 出版《实现领域驱动设计》,补充了技术实现层面内容。同时,各种开发框架和工具开始支持 DDD 思想的实现,DDD 也与敏捷开发结合,在快速迭代中得到应用。
  • 微服务与现代 DDD(2010 年代):微服务架构兴起,推动了 DDD 边界上下文的实践,每个微服务可视为一个边界上下文。DDD 与事件驱动设计结合,使用领域事件在上下文之间传播信息,CQRS 和事件溯源等概念进一步增强了 DDD 在复杂系统中的应用。
  • 现代领域驱动设计(2020 年代):DDD 的原则被应用于云原生开发,在 DevOps 实践中帮助团队更高效地协作。Alberto Brandolini 提出的事件风暴成为重要的建模方法。

三位专家的贡献及价值

  • Eric Evans:2003 年出版《领域驱动设计:软件核心复杂性应对之道》,提出通过构建领域模型将软件设计围绕业务需求展开,强调通用语言、分层架构、聚合与边界上下文等概念。其价值在于为 DDD 奠定了理论基础,让开发社区认识到在复杂系统中,将技术解决方案与业务需求对齐的重要性,推动了软件开发从以技术为中心向以业务为中心的转变。
  • Vaughn Vernon:2014 年出版《实现领域驱动设计》,详细阐述了 DDD 在架构设计、领域建模、代码实现等方面的最佳实践,为 DDD 实践者提供了具体的操作指南和参考,让 DDD 从理论走向更广泛的实际应用,帮助开发者更好地在项目中落地 DDD,提升软件系统的架构质量和可维护性。
  • Alberto Brandolini:2013 年提出事件风暴概念,这是一种基于工作坊的快速建模方法,通过识别领域事件来快速建立领域模型,加速了 DDD 的建模过程。其价值在于提供了一种高效的领域建模手段,能够让团队在短时间内梳理复杂的业务流程和领域知识,促进业务人员和技术人员的沟通与协作,有助于更准确地理解业务需求,为后续的领域模型构建和系统设计打下良好基础。

二、整体流程(粗粒度)

 整体分为四个阶段,首先是挖掘用户故事(梳理业务流程)、在挖掘用户故事的同时就会建立统一语言,统一语言是非常有必要的,否则就会出现沟通效率低,沟通不一致的情况,并且这种统一语言不仅是技术与技术之间,更重要的是技术与业务之间,统一语言之后就会进行上层建设(战略设计)、上层假设规划好之后,接着就会进行应用落地(战术设计)、后续会针对这四个阶段分别展开进行详细深入的介绍。

在这个整体的流程中,有必要强调一个概念,这个概念就是Model Exploration Whirlpool,翻译过来就是“建模涡流”,它要表达的意思是整个的流程并不是顺序性不可逆的,相反在不同的节点之间会进行循环迭代,不断完善,比如战略设计之后进行战术设计,但是在进行战术设计的时候,发现战略设计的某一块内容并不完善,然后就可以回到战略设计进行优化、调整。

四、总结

DDD是一个方法论,是一个解决复杂业务场景的方法论,在如今产业互联网的大背景下,通过这一理论的学习,将帮助我们更好的设计复杂业务场景。

http://www.dtcms.com/a/302838.html

相关文章:

  • debian系统分卷是不会影响系统启动速度?
  • 排序算法 (Sorting Algorithms)-Python示例
  • Android 系统架构
  • 阿里云 API 网关 x OKG:游戏连接治理的「最后一公里」
  • 阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件
  • 电脑不小心误删了文件怎么恢复??
  • AI资讯日报 - 2025年07月28日
  • EXCEL批量生成超链接引用无效的情况
  • Kotlin中Flow
  • 基于Spring Boot的装饰工程管理系统(源码+论文)
  • 一个典型的微控制器MCU包含哪些模块?
  • kafka开启Kerberos使用方式
  • “本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”解决方式
  • 算法训练营day34 动态规划② 62.不同路径、63. 不同路径 II、343整数拆分、96.不同的二叉搜索树
  • Kafka 顺序消费实现与优化策略
  • linux diff命令使用教程
  • 最长连续数组
  • 【C++11】列表初始化【{ }使用详解】
  • Facenet(MTCNN+InceptionResnetV1)人脸考勤项目(有缺点,但可用)
  • 境外期货Level2高频Tick历史行情数据获取与应用指南
  • 基于LangGraph Cli的智能数据分析助手
  • MCU 中的 PWM(脉冲宽度调制)是什么?
  • 八大神经网络的区别
  • Java Stream流的使用
  • Open CV图像基本操作可莉版
  • Linux:线程同步与线程互斥
  • PBR技术
  • 杭州网站建设公司,哪家擅长做多语言外贸站?
  • SpringCloude快速入门
  • JVM 笔记:类加载、内存管理、垃圾收集与垃圾收集器