「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

Eric Evans:领域驱动设计(DDD)当前更为适用

2017 年 9 月 24 日

有人质疑 2003 年出版的《领域驱动设计》一书中的理念当今是否依然适用。在该书的作者 Eric Evans 看来,相比于 14 年前该书出版时,当前领域驱动设计(DDD,Domain-Driven Design)的理念更为适用。这是来自于 Evans 在 Explore DDD 大会上所作的开幕式主题演讲。Explore DDD 大会是首个聚焦于 DDD 的开创性大会,在北美的丹佛市举行。Evans 的报告依据软件开发的历史沿革,探讨了一些 DDD 的主要理念。比起我们过去所采用的方式,软件开放工具和技术范围在不断扩展,其中不少已经采用了 DDD 方式。Evan 指出:“DDD 不涉及具体的开发技术,但也并非对技术漠不关心”。

回顾 2003 年,那时我们所能使用的最先进技术,无非是 Java、J2EE、SQL 数据库和对象关系映射(ORM,Object-Relational Mapper),此外没有更多的选择。这样的选择面不广,导致了我们使用这些工具仅是因为这些工具是唯一可用的。Evans 举例说,ORM 并不适用于解决我们的所有事情,但依然被我们持续使用了十到十五年。Evans 称,他并非说对于某些情况任何工具和模式架构都不适用。而是对不分场合都仅有一套解决方案可用感到困惑。他相信,DDD 在过去的十四年间得到了发展,因此“如果在推行 DDD 时继续照本宣科《领域驱动设计》一书,这就不太光彩了”。

在 Evans 撰写《领域驱动设计》一书时,其中很多概念是难以用当时的工具所实现的。但时至今日,使用现代的平台实现已变为易事。Evans 特别强调了书中给出的“使值对象不可变”这一理念。这一理念曾非常难以做到,以至于被开发人员认为是不值得遵守的。但是情况已经发生了变化,函数编程语言让不可变更易于实现。与此同时,微服务的推进有助于标记上下文边界(Context Boundary),而 NoSQL 数据库提供了比关系数据库更好的聚合管理。这些进展使开发人员可以完全聚焦于解决复杂性问题,该问题是软件的核心问题。Evans 称赞这些进展为开发人员编写出完全表达模型的软件提供了方便。“如果技术能在此类事情上为我们提供支持,那么我们就可以聚焦于去给出更好的模型”。

软件开发中,妥协和权衡是不可避免的。Evans 鼓励所有人接受“并非所有的大型系统都会得到很好的设计”。根据“好篱笆造就好邻里”这一理念,受限上下文会使系统中好的部分免受不好部分的影响。我们可以做出合理的推理,即并非所有的开发都能处于良好定义的受限上下文中,同时并非每个项目都会遵循 DDD。开发人员常常会感慨,在工作中面对的是一些遗留系统。Evans 却对遗留系统给予了高度的评价,因为企业利润通常主要来自于这些遗留系统。他鼓励开发人员,“终究会有一天,你所开发的系统也会成为遗留系统”,希望到那时它会得到交口称赞。

开源软件也受到了 Evans 的推崇,尤其是作为一种学习方式时。Evans 在演讲中分享了他通过例子学习 Smalltalk 的经历。从案例中学习这一精神完全匹配 Explore DDD 大会的协同环境,大会中有三分之一的演讲是对真实世界案例研究,与会者分享了演讲者在实现 DDD 中的经验。

Evans 很高兴看到风向已转变为趋向优雅设计。《领域驱动设计》一书的撰写,正是为了解决如何面对系统无法扩展导致业务也不能扩展的这类问题。DDD 作为一种知我实现的需求,Evans 指出:“对更整洁设计的需求,终将创建更整洁的设计”。

查看英文原文: Eric Evans: Domain-Driven Design Even More Relevant Now

2017 年 9 月 24 日 19:002985
用户头像

发布了 381 篇内容, 共 99.0 次阅读, 收获喜欢 228 次。

关注

评论

发布
暂无评论
发现更多内容

关于统计专业计算软件学习及期望薪酬的调查

容光

Rust从0到1-集合-Vector

rust 集合 Collections vecotr

软件IT专业大学生学习情况调查

老猿Python

大学生 软件IT专业 高校 学习情况调查

系统服务-技术专题-并发模型粗浅分析探讨

李浩宇/Alex

并发编程

智能创作平台全新升级,助力开启智能媒体新时代

百度大脑

人工智能 智能创作

独具特色的臻品音库,带来更优质的听觉体验

百度大脑

人工智能 独具特色

江西组织部干部人事综合管理平台建设,干部管理系统

13823153121

阿里云 ARMS 3.0 重磅发布云拨测,Gartner APM 魔力象限产品解读

阿里巴巴中间件

阿里云 Gartner 可观测

复习一周 成功拿到字节Offer 我也惊呆了

学Java关注我

Java 程序人生 编程语言 计算机 java面试

从理论走向实战!阿里高工熬夜28天整理出的Spring源码速成笔真香

程序员小毕

Java spring 架构 面试 设计模式

编曲混音必备法宝——FL三大效果器简介

奈奈的杂社

一周信创舆情观察(4.19~4.25)

统小信uos

关于统计专业计算软件学习及期望薪酬的调查

容光

000 ES suggest-英文

小林-1025

es7

公安局情指勤一体化指挥调度系统开发

13823153121

资源数据治理的应用实践

鲸品堂

数据 治理 运营商

音频技术及行业的发展

Emotion

音频技术

干了八年的阿里面试官,给大家分享我面试时最爱问的Java面试题

Java架构师迁哥

面试10家公司,终入阿里,感谢大佬的Java面试进阶解析笔记

Java架构师迁哥

谈Android端的高音质和低延时音频编码

Changing Lin

音视频 四月日更 4月日更

不想搞Java了,现在Java面试为何这么难

Java架构师迁哥

001 ES suggest-IK 中文

小林-1025

ES es7

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

云流

Java 程序员 架构 面试

【音视频】弱网下实时视频的极限通信

Damon

音视频 视频处理 视频压缩 5月日更

这份清华学霸的Java反射完整版学习笔记,2小时带你从入门到入土

飞飞JAva

数据人上班划水都聊什么

数据社

大数据 程序员

【Java面试】30个 Java 集合面试必备的问题和答案 ​

Java架构师迁哥

阿里内部“SpringCloudAlibaba学习宝典”全是细节讲解,从入门到入魂

Crud的程序员

Java 编程 程序员 架构 spring cloud alibaba

uni-app rtc插件集成指南及常见问题--iOS

anyRTC开发者

uni-app ios 音视频 WebRTC RTC

你“会”学算法吗?

IT蜗壳-Tango

头一次见到阿里大牛把spring boot讲的如此通俗易懂

云流

Java 编程 程序员 架构

Eric Evans:领域驱动设计(DDD)当前更为适用-InfoQ