2015年之后,随着云原生、微服务、大中台等一系列技术名词诞生的同时,还有一个耳熟能详的名词“领域驱动”也开始被捧上神坛 。笔者初次听到领域驱动是参加一个技术分享会 , 当时给我的直观感受就是:好像说了什么,但又好像什么都没说,很多概念很"形而上学" , 在天空中飘啊飘,无法落地 。
十年过去了,中台已经过气,微服务回归单体也一度成为技术圈讨论的热点话题,曾经神坛上云遮雾绕的 DDD 在今天看来是否还有讨论的意义?在过去一两年的实践中,笔者对 DDD 有了更深的体会,本文将阐述我的一些浅见,如果有理解不到位的地方 , 也希望同学们一起讨论 。
一、领域驱动的理念
领域驱动这个概念一开始是由大神 Eric Evans 在2003发布他的名著《DomAIn Driven Design:Tackling the Complexity in the Heart of Software》中提出,从标题中可以直观的知道 DDD 是为了解决软件系统的复杂性问题,是一种降低业务系统复杂度的方法论,许多同学认为领域驱动难以理解,是因为他提出了很多抽象的概念,我们不妨先抛开这些概念 , 先去理解一下它去解决问题的思路 。
1、统一语言与模型
对于一个开发来说,我们的工作一句话就是:用代码实现需求,在实现的过程中不同的人、不同的团队,可以有不同的实践,领域驱动就是其中的一种实现路径 。领域驱动在需求到代码之间试图建立起一条桥梁,桥梁的名字叫统一语言和模型 。

文章插图
什么是统一语言?软件开发的核心难度就在于处理隐藏在业务知识中的复杂度,想要处理这种复杂度,首先需要打破业务与技术之间沟通壁垒,在一个项目中,不光是有开发人员,还有测试、运维、产品、pm 等等,能把事做成的前提是可以把事情说清楚,我们知道中华文化博大精深一句话在不同的环境、场合下完全有不同的语意,统一语言的思想就是提倡团队内通过不断沟通去确定在一个业务领域中的术语或概念有唯一明确的语意 。
那什么是模型呢?我总结为:一种化繁就简的抽象,抽象是目的是为了简化问题,先忽略细节,从顶层思考问题 , 抽象不在乎形式的表达,而取决于如何看待问题和分析问题的角度,我们举几个例子说明:
把大象装进冰箱需要几步?一共三步,打开冰箱->放入大象->关上冰箱 。
虽然这是一个梗,但不得不说 , 这是很好的一种面向过程的抽象 。
- 程序=数据结构+算法 。
- 类图、流程图、架构图...

文章插图
在引入统一语言和模型抽象的思路之后,就可以把需求到实现的这个过程用下图表示,技术和业务的相关同学通过统一语言去沟通交流需求,通过模型抽象描述需求,最后按照模型去实现相应的代码,领域驱动的一大目标是:修改需求即修改统一语言,修改统一语言即修改模型 , 修改模型即修改代码,这也就实现了从需求到代码的有效信息传递 。

文章插图
2、分而治之:再谈归并排序
为什么这里要谈起归并算法,因为领域驱动所提倡解决问题的思维方式和归并排序算法如出一辙 , 可以总结为一句话:自顶向下拆分、自低向上合并 。

文章插图
我们简单回顾一下归并排序的思路:
- 明确主函数的功能、输入、输出;
- 分解问题,确定分解后子函数的功能、输入、输出;
- 合并子函数的返回,伪代码如下:
void mergeSort(std::vector<int>& arr, int left, int right) {
推荐阅读
- 面向未来的 Web 框架,更快、更小、更好用!
- 微信、QQ地震预警功能已覆盖四川全省,将逐步覆盖全国
- 这些男星长相看似很帅,实则越看越怪,吴磊、肖战都榜上有名
- 汤盈盈、钟丽淇为姚莹莹庆祝53岁生日!
- 外网曝鹿晗涉毒被调查,35岁的他把过气顶流的不堪体现的淋漓尽致
- 上星央一!40集军旅剧来袭,大腕云集,连刘奕君、李幼斌都请来了
- 中国四美、新加坡四美、泰国四美、日韩四美!哪个国家的最惊艳?
- 36集当代涉案新剧!张译、李光洁、蒋欣领衔!王劲松、丁勇岱作配
- 以为是假新闻,其实是真新闻,王一博、撒贝宁、大S,个个都离谱
- 这些男星长相看似很帅,实则越看越怪,吴磊、肖战榜上有名
