领域驱动设计揭秘

简介: 领域驱动设计揭秘

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

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

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


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

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


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


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

相关文章
|
监控 Java Linux
开源流程引擎Camunda
开源流程引擎Camunda
关于@NotNull 注解中groups 的使用
关于@NotNull 注解中groups 的使用
1565 0
关于@NotNull 注解中groups 的使用
|
10月前
|
存储 人工智能 自然语言处理
拥抱Data+AI|B站引入阿里云DMS+X,利用AI赋能运营效率10倍提升
本篇文章针对B站在运营场景中的痛点,深入探讨如何利用阿里云Data+AI解决方案实现智能问数服务,赋能平台用户和运营人员提升自助取数和分析能力,提高价值交付效率的同时为数据平台减负。
拥抱Data+AI|B站引入阿里云DMS+X,利用AI赋能运营效率10倍提升
|
6月前
|
SQL XML Java
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
225 69
|
9月前
|
监控 Linux 网络安全
Zabbix Agent使用介绍
Zabbix Agent使用介绍
374 10
|
12月前
|
存储 Java 数据库
Spring Boot 优雅实现多租户架构
本文详细介绍如何使用Spring Boot和Spring Cloud实现多租户架构。多租户架构允许多个租户共用一个应用,各自拥有独立资源和数据。其优势包括满足个性化需求、降低成本、复用代码以及增强可扩展性。文中探讨了架构选型、数据库设计、应用部署及租户管理等内容,并提供了具体实现步骤和技术细节。适用于SaaS应用和多租户云服务等场景。
idea插件SequenceDiagram查看方法调用链
idea插件SequenceDiagram查看方法调用链
289 0
idea插件SequenceDiagram查看方法调用链
|
测试技术 Python
Python中的装饰器:原理、用法与实例
【2月更文挑战第20天】 本文将深入探讨Python中装饰器的工作原理,使用方法以及实际应用场景。装饰器是Python的一项重要特性,它允许我们在不改变函数源代码的情况下,增加函数的功能。我们将通过实例来详细解析装饰器的使用,帮助读者更好地理解和应用这一强大的工具。
|
Python
Python解释raise关键字的作用。
Python解释raise关键字的作用。
674 1
|
Java
IDEA安装class文件分析工具(binEd 和 JClassLib)
IDEA安装class文件分析工具(binEd 和 JClassLib)
320 0