领域驱动设计揭秘

简介: 领域驱动设计揭秘

我在2020年领域驱动设计中国峰会的分享,主题为:领域驱动设计揭秘。分为四个部分:

  • 领域驱动设计 vs. 数据驱动设计
  • 领域驱动设计的黑铁时代和黄金时代
  • 单体架构是邪恶的吗
  • 领域驱动设计的不足与领域驱动设计统一过程

¶ 领域驱动设计 vs. 数据驱动设计


通过比较领域驱动设计和数据驱动设计,探讨为何基于数据库进行设计容易催生出贫血模型与事务脚本,指出领域驱动设计与数据驱动设计的不同之处在于限界上下文和聚合。

拙著《解构领域驱动设计》特别强调了限界上下文和聚合的重要性,分别将其称之为是基本的架构单元和设计单元。限界上下文与聚合的引入,也是领域驱动设计有别于面向对象设计的根本特征。


¶ 领域驱动设计的黑铁时代和黄金时代


由此引出我对诞生于2003年的领域驱动设计为何得不到广大程序员青睐的原因。除了在团队管理、需求管理和项目管理方面,领域驱动设计提出了更高要求之外,多数软件设计人员并未认识到限界上下文与聚合的价值;相反,由于限界上下文与聚合边界对设计的诸多限制和约束,程序员更倾向于选择简单的事务脚本和贫血模型的设计模式,更何况,大多数早期软件系统并无高并发、高可靠等质量属性的压力,无法预见到限界上下文在应对架构演进时的重要意义,故而更愿意选择重用领域逻辑的单体架构。这样的单体架构缺少限界上下文的边界保护,随着需求的变化和时间的推移,较容易成为大泥球。直到微服务的诞生——大多数软件设计人员充分认识到,原来,十余年前领域驱动设计的限界上下文已经给出了微服务的边界约束,只不过一个是逻辑边界,一个是物理边界罢了。 单体架构是邪恶的吗?在限界上下文边界约束下的单体架构并不邪恶,只是相较于微服务而言,它的重用成本更低,无法在有效边界隔离下制止那些肆意穿越限界上下文边界形成领域模型重用的调用,从而得到了这一恶名。因此,我在整洁架构与六边形架构的基础上提出了菱形对称架构,希望在代码模型和设计原则上促进开发人员认识到边界的约束力,提高整个系统架构的演进能力。领域驱动设计的不足与领域驱动设计统一过程我承认领域驱动设计无论伦比的设计魅力,尊敬Eric Evans卓越的洞见与设计前瞻能力,但也不讳言领域驱动设计本身存在的不足。这几年,领域驱动设计随着微服务的流行变成了显学,但领域驱动设计不是“银弹”,既然如此,领域驱动设计统一过程(DDD-UP)就更不是“银弹”了,它不过是对领域驱动设计的一种补充和完善罢了。浸淫软件设计近二十年,我越来越觉得设计玩不得玄虚,不要认为设计是一种“道”,它自有不可言说之处,但那种高妙不是高冷,更不是“道可道非常道”,关键还是落地。若能提供一种简便实用的方法让一套方法体系更容易落地,何乐而不为?!理论体系当然重要,但更重要的是能够真正将方法体系运用到软件构建中,降低开发门槛,提升设计与编码质量,这才是实证主义的态度。

相关文章
|
存储 自然语言处理 前端开发
领域驱动设计(DDD)-基础思想
一、序言     领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。 二、领域驱动设计 DDD是什么 wiki释义:     领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂
7358 0
|
缓存 前端开发 JavaScript
前端领域驱动设计的一些思考
前端领域驱动设计的一些思考
638 0
|
存储 JavaScript 安全
【领域驱动设计】Redux 和领域驱动设计
【领域驱动设计】Redux 和领域驱动设计
|
存储 设计模式 前端开发
浅谈领域驱动设计实践——董炎焱
近年来领域驱动设计(Domain Drive Design)大火。那么我们为什么要学习领域驱动设计,它适合用于哪些场景?怎么去用?在用的过程中,又有哪些需要注意的地方呢?
浅谈领域驱动设计实践——董炎焱
|
缓存 数据可视化 Java
浅析 DDD 领域驱动设计(2)
浅析 DDD 领域驱动设计
240 0
浅析 DDD 领域驱动设计(2)
|
存储 缓存 监控
浅谈我对DDD领域驱动设计的理解
DDD的全称为Domain-driven Design,即领域驱动设计。下面我从领域、问题域、领域模型、设计、驱动这几个词语的含义和联系的角度去阐述DDD是如何融入到我们平时的软件开发初期阶段的。要理解什么是领域驱动设计,首先要理解什么是领域,什么是设计,还有驱动是什么意思,什么驱动什么。
|
设计模式 BI 项目管理
重新解读DDD领域驱动设计(一)
回顾 十年前,还未踏入某校时,便听闻某学长一毕业就入职北京某公司,月薪过万。对于一个名不见经传的小学院,一毕业能拿到这个薪水还是非常厉害的。听闻他学生期间参与开发了一款股票软件,股票那时正迎来一波疯涨。
1668 0
|
SQL NoSQL 程序员
为何要领域驱动设计
领域驱动设计备忘录:   参考:https://www.cnblogs.com/cnblogsfans/p/4284462.html#undefined 前言 领域驱动设计最近貌似开始火起来了,越来越多的人开始认识到领域设计的重要性,从我做过的项目来看,似乎欧洲已经有很多的公司开始实施领域驱动设计了...
1152 0