限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

专访 Eric Evans:领域驱动设计最新进展

  • 2007-05-02
  • 本文字数:2898 字

    阅读完需:约 10 分钟

InfoQ.com 采访了领域驱动设计的创始人 Eric Evans,以了解这一设计技术的最新进展。

为什么领域驱动设计一直都很重要?

基本上,领域驱动设计是我们应该专注于用户所关心领域里的重要问题的指导原则。我们的智慧应该用在理解这一领域上,和那个领域的其他专家一起将它抽象成一个概念。这样,我们就可以应用这个抽象出来的概念构造强大而灵活的软件。

它是一个永远不会过时的指导原则。不论我们何时操作一个复杂的领域,它都有用。大趋势是软件会应用于越来越复杂的问题,越来越趋近于业务的核心。对我来说,这一趋势好像中断了很多年,因为 Web 突然出现在我们面前。人们的注意力被从富于逻辑和艰深的解决方案上移开,因为有太多的数据需要传递到 Web 上,只需要简单的动作即可。因为太多的数据要传递,但短时间内在 Web 上做这一简单的事情又是比较困难的,所以消耗了软件开发的所有能力。

但是现在人们大步跨越了这一 Web 应用的基本层次,又把注意力集中在业务逻辑上了。

最近,Web 开发平台逐渐成熟,足以应用领域驱动设计来做 Web 开发,有很多积极的信号,比如,SOA,如果应用的好,就可以提供给我们一个非常有用的解析领域的方法。

同时,敏捷过程也有了足够的影响力,大多数项目现在多少都意识到了迭代、和业务伙伴亲密协作、应用持续集成和在强沟通环境下工作的重要性。

所以领域驱动设计在未来会越来越重要,目前已经有了些基础。

技术平台,像 Java、.NET、Ruby 或者其他的,一直在变化。领域驱动设计如何适应这一情况?

实际上,新的技术和流程应该由它们是否支持团队专注于他们的领域来验证,而不是置领域于不理。领域驱动设计不依附于哪一个特定的平台,但是有些平台为创造业务逻辑提供了更多的好方法,有些平台更加专注。最近几年的发展显示,为创造业务逻辑提供方法的平台是一个有希望的方向,尤其在可怕的 20 世纪 90 年代后期。

Java 是这几年默认的选择,从表达角度看,它是一种典型的面向对象语言。对于 Distracting Clutter 来讲,基础语言是个不错的选择。它有垃圾收集功能,实践证明这一功能很有用(这一点是相比于需要非常关注底层细节的 C++ 而言的)。Java 语法有些地方比较乱,但是 POJO(Plain Old Java Objects)仍然可以设计的让人理解。Java 5 语法的一些创新之处提高了代码的可读性。

但是在 J2EE 框架初次出来时,完全将那些基本的表达淹没在大量的框架代码之中。根据早期的契约(比如 EJB Home,为所有变量写的 Get/Set 前缀存取等)生产出可怕而糟糕的对象。这一工具是如此笨重,使得开发团队不得不全力以赴才能让它工作。而且改变对象非常困难,一旦产生的大量代码和 XML 出现问题,人们往往束手无策。这样的平台很难开发出高效的领域模型。

另外就是使用初级的第一代工具勉强开发藉由 Http 和 Html(不是为此目的而设计的)来完成的 Web UI。在那个时候,创建和维护一个像样的 UI 是如此困难,以至很少有人去关注有着复杂内部功能的设计。有意思的是,恰在这时,对象技术出现了,很好地解决了复杂建模和设计的问题。

这一情况在.NET 平台上也是如此,有些事情处理的比较好一些,有些还更糟糕。

那是一个让人沮丧的时代,但是在过去的四年里,总算有了些转变。首先来看 Java,关于怎样有选择地使用框架社区里有了新的看法,很多新的优秀的框架(多数是开源的)也应运而生。比如 Hibernate 和 Spring 这些框架可以用一种更轻量级的方法处理 J2EE 曾试图做到的特定工作。像 AJAX 这样试图解决 UI 问题的方法也更加便捷。现在的项目在选择使用可以提供价值和混合的新 J2EE 项时也更加聪明。术语 POJO 就是在这时产生的。

结果是项目的技术贡献逐渐明显地减少,在把业务逻辑和系统的其他部分隔离方面也有了明显的进步,这样逻辑就可以基于 POJO 来写了。这不会自动产生领域驱动设计,但是它提供了一个可行的机会。

这就是 Java 世界。然后就是像 Ruby 这样的新来者。Ruby 有表达力很强的语法,在这一基础层面上它会是领域驱动设计的一个很好的语言(尽管我没有听说在那些应用程序中有哪些实际案例)。Rails 带给人们很多兴奋的地方,因为它最终好像能够使得开发 Web UI 像上世纪 90 年代初期在 Web 出现之前开发 UI 时一样简单。很快,这种能力就被大量使用在构建众多没有太多领域背景的 Web 应用上,因为就是开发这些简单的应用在过去来说也是很困难的。但是我的希望是,当问题里的 UI 实现部分减少时,人们可以把这看成专注领域的机遇。如果 Ruby 使用是从这个方向起步的,那么我认为它会为领域驱动设计提供一个很棒的平台。(一些基础设施可能要被添加进来)

更多前沿的话题发生在域描述语言(DSL)领域,我一直深信 DSL 会是领域驱动设计发展的下一大步。现在,我们还没有一个工具可以真正给我们想要的东西。但是人们在这一领域比过去做了更多的实验,这使我对未来充满了希望。

现在,我所能说的是大多数尝试使用领域驱动设计的人们是基于 Java 或者.NET 平台,也有少部分在 Smalltalk 上。在有直接效果的 Java 世界里,这是一个积极的信号。

从你写完这本书,在领域驱动社区里发生了那些值得注意的事情?

一个让我很兴奋的事情是,人们采用我在书中提到的原则然后用一些我所没有预料到的方法实践。比如,在挪威国家石油公司的 StatOil 项目中对战略设计的使用。那儿的一个架构师根据他的经验写了一篇报道

在其他项目里,还有人做了上下文映射,并应用到在抉择是自己构建还是购买时到对已有软件的评估当中。值得一提的是,我们中的有些人已经通过开发一些许多项目中要用到的基础领域对象,探索这方面的话题了。

我们一直在探索在仍然用 Java 实现对象时,究竟能把这种域描述语言推动多远。

已经走了很远。在人们告诉我他们在做什么事情的时候,我一直都很感激。

请您给要学习领域驱动设计的人一些建议?

读我的书!;-) 另外,在项目中舍得投入时间和资金。我们最初的目标之一就是提供一个好的案例,让人们可以通过它进行学习。

要谨记一点的是领域驱动设计主要是由团队来操作,所以你也许要成为一个布道者。现实一点讲,可能需要你找到一个大家正在努力完成的项目。

另外还要注意下面几个领域建模时的重要之处(Pitfall):

  • 注重实践。模型需要代码。
  • 专注于具体场景。抽象思维需要落地于具体案例。
  • 不要试图对任何事情都进行领域驱动设计。画一张范围表,然后决定哪些应该进行领域驱动设计,哪些不用。不要担心边界之外的事情。
  • 不停地实验,期望能产生错误。模型是一个创造性的流程。

查看英文原文: Eric Evans on why DDD Matters Today - - - - - -

作者简介:Eric Evans 是《领域驱动设计——软件核心复杂性应对之道》(Addison-Wesley 2004,已由清华大学出版社翻译出版)一书的作者。早 20 世纪 90 年代,他就参与了很多项目,用具有多种不同的方法多种不同的输出的对象开发大型的业务系统。这本书是那些经验的总结。它提供了一个建模和设计技术的系统,成功的团队应用这一系统可以组装有业务需求的复杂软件系统,并使系统在增大时仍然保持敏捷。Eric 现在是“Domain Language”的负责人。Domain Language 是一个咨询小组,它指导和训练团队实施领域驱动设计,帮助他们使自己的开发工作对业务而言更有生产力和更有价值。

2007-05-02 20:345185

评论

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

AR Engine毫秒级平面检测,带来更准确的呈现效果

HarmonyOS SDK

HMS Core

java培训技术学习对学历有什么要求

小谷哥

互联网医疗领域月度观察——互联网医院可线上开具新冠处方,互联网首诊“破冰”

易观分析

疫情 互联网医疗

解析机器学习中的数据漂移问题

Baihai IDP

人工智能 机器学习 AI 机器学习模型 企业号 2 月 PK 榜

新泰山众筹SUN4.0系统开发模式详情

开发微hkkf5566

一文梳理 Code Review 方法论与实践总结

阿里巴巴中间件

阿里云 云原生 Code Review

亚马逊云科技核心服务之计算服务(Part1:Amazon EC2 星巴克为什么横向排队)

亚马逊云科技 (Amazon Web Services)

云原生 亚马逊云科技 Builder 专栏

大数据在互联网时代的意义!

镭速

TiDB 中标杭州银行核心系统数据库项目

编程猫

大数据编程培训课程怎么选择

小谷哥

参加大数据开发培训机构怎么样

小谷哥

盘点2022:开源热度居高,技术思考与经验分享是开发者的最爱

阿里巴巴中间件

阿里云 中间件

快速上手python的简单web框架flask

程序那些事

Python flask Web Web框架 程序那些事

打卡智能中国(一):看守隧道的老人

脑极体

隧道 智能中国

写给go开发者的gRPC教程-通信模式

凉凉的知识库

golang 微服务 gRPC 服务治理

web前端培训班口碑比较好有哪些

小谷哥

大数据开发技术如何选择培训机构

小谷哥

Apipost全局变量和环境变量的使用

popo223344

测试 测试工具 测试开发

小红书2023春节消费报告解读:大众消费意愿集中释放,表达和分享成为新经济消费诉求

易观分析

春节 小红书 消费

面试必问:说一下 Java 虚拟机的内存布局?

王磊

java面试

从理论到实践:MySQL性能优化和高可用架构,一次讲清

Java MySQL 数据库 性能优化

微众银行 TiDB HTAP 和自动化运维实践

PingCAP

TiDB 自动化运维

百丈竿头,勠力同心丨九科信息CEO万正勇专访《数字助力赋能产业发展》在央视【中央新影-老故事】频道播出

九科Ninetech

建设经营指标体系,国央企需要什么样的指标平台?

Kyligence

指标中台

C++数据结构

老浩

推进媒体深度融合:腾讯与上海文广集团达成战略合作,腾讯云、SMT成立联合实验室

科技热闻

JVM 如何获取当前容器的资源限制?

阿里巴巴中间件

Java 阿里云 云原生 中间件

MASA Stack 1.0 发布会讲稿——趋势篇

MASA技术团队

.net 云原生 dapr blazor MASA

数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年1月刊

墨天轮

数据库 oracle postgresql MySQL 运维 故障处理

Spring Cloud Alibaba 在 Proxyless Mesh 上的探索

阿里巴巴中间件

阿里云 S而vice Mesh Spring Cloud Aliababa

一张图看懂CodeArts TestPlan 5大特性,带你玩转测试服务

专访Eric Evans:领域驱动设计最新进展_Java_霍太稳@极客邦科技_InfoQ精选文章