写点什么

Eric Evans:领域驱动设计的实践

  • 2018-02-25
  • 本文字数:1263 字

    阅读完需:约 4 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Eric Evans 在最近于阿姆斯特丹举行的 DDD Europe 2018 上做了主题演讲,他认为构建软件时,很重要的一点就是不断探索和练习。他非常青睐领域驱动设计(Domain-Driven Design,DDD)中策略模式,但是他发现真正有意思的是接受一个困难的领域,按照不同的方式进行推导分析,打破窠臼,尝试寻找新的理念,他还以“时间(time)”作为领域举了一些实际的例子。

Evans 是最早的 DDD 图书的作者,经历过很多的项目,在这个过程中,团队发现了领域中很多新的理念,并且能够基于发现的理念构建伟大的软件。但令人遗憾的是,很多项目他无法公开讨论,这些项目相关的业务可能具有保密协议(non-disclosure agreement,NDA),或者它们的领域本身就非常晦涩难懂,需要非常多的时间才能描述清楚。

通用子域(generic subdomain)指的是在很多的系统中都会看到的领域,Evans 发现这些领域很适合作为实践的起点,有些领域我们已经习惯了它们的运行方式,所以被我们长期忽略,它们尤为适合作为起点。他鼓励开发人员在这些领域花费时间去发现和探索新的想法,寻找为它们建模的新的可能性和新的方式。他认为,这是一个战术层面的练习,我们正在设计非常具体的东西,应该通过编码来尝试这些想法。他还指出,有一些真正的变化是非常重要的。在改善模型时,微小的增强非常重要,但是如果我们想要推倒重来的话,就必须要想好可行方案。

Evans 以 Joda-Time 为例进行了说明,这是一个用于时间领域的库,长期以来一直是 Java 程序员的标准工具,并且在进行了一些改善后,纳入了 Java 8。它十年来没有明显的变化,其中一个主要的原因就是对于大多数场景来说,它已经足够好了。因此,我们停止了寻找替代方案,我们非常习惯于使用它,忘记了可能还有替代的方案,甚至已经无法想到完成该功能的其他方式。这种状态被 Evans 称为“遗留性的盲目(legacy blindness)”。按照他的经验,几乎在每个项目中,在以不同的方式进行思考时,很大的一个障碍就是对当前领域的熟悉程度,如果遗留模型非常好的话,那这一点就更明显。打破这种盲目性的一种方式就是找一个具体的场景,展现遗留模型一些不合时宜的地方,并以此作为起点。

Evans 展现了 Joda-time 的几个例子,他据此在时间这个领域寻找新的视角和概念。其中一个样例就是为某个时间实例增加一个月,根据起始时间的不同,结果看起来会有一点诡异:

  • 为 2018 年 1 月 31 日增加一个月,将会返回 2018 年 2 月 28 日;
  • 为 2018 年 1 月 31 日增加两个月,将会返回 2018 年 3 月 31 日;
  • 为 2018 年 1 月 31 日增加一个月,然后对得到的结果再增加一个月,将会返回 2018 年 3 月 28 日。

另外一个具体的例子就是按照新的方式来计算美国感恩节假期的日期,也就是十一月份第四个星期四。他强调练习的目的并不是取代整个库,而是要摆脱对遗留系统的盲目性,在以更好的方式解决问题时,寻找新的理念和想法。

DDD Europe 2019 的计划已经启动,但是具体的日期尚未确定。

查看英文原文 Eric Evans: Practicing Domain-Driven Design

2018-02-25 18:002737

评论

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

不懂源码可以去面试?阿里P7:Spring源码解析整套笔记分享

Java架构师迁哥

微服务中台技术解析之网关(dubbo-rest)实践

小江

dubbo 架构设计 api 网关

Javascript词法结构你懂吗?

前端树洞

JavaScript ecmascript 大前端 4月日更

大神,膜拜!SpringMVC高能笔记分享,从头到尾,都是精华

Java架构师迁哥

Java运算符

ベ布小禅

4月日更

翻译:《实用的Python编程》08_02_Logging

codists

Python

浅论变量的作用域与变量的生存周期

Integer

c

推荐一本新书《Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner》

顿晓

推荐书籍 4月日更 SICP flexibility

智能小车系列-树莓派UPS-X750电源

波叽波叽啵😮一口盐汽水喷死你

树莓派 nodejs X750 树莓派UPS I2C

Spring Boot Admin 2.1.0 全攻略

学Java关注我

Java 程序员 架构 互联网 技术宅

React 学习总结

pydata

Vue 大前端 低代码 React

Let's Go 100

escray

学习 Go 语言 4月日更 Go100

重装变态的微信

箭上有毒

生活 4月日更

自考答题卡识别初级解决方案,基于 Python OpenCV

梦想橡皮擦

Python OpenCV 4月日更

不是吧,都2021年了你还不知道有面试全真宝典这个东西吧!

Java架构师迁哥

三位阿里P8大牛精心整理的笔记《并发编程核心讲义》37个知识点全析,4个经典实战案例剖析,归纳总结。

Java架构师迁哥

js数组和函数

赫鲁小夫

4月日更

Jenkins教程:使用Jenkins进行持续集成

码语者

DevOps jenkins

面试官常考的 21 条 Linux 命令

xcbeyond

Linux 面试 4月日更

架构训练营模块 1 作业 - 张动动

张大彪

架构训练营

黄金圈法则 - 识别真伪需求的神器

石云升

思维模型 28天写作 职场经验 4月日更

瞬间爆炸,凭借阿里P9的Java 核心技能精讲,直接让我在三月斩获了21个offer

Java架构师迁哥

年轻人不要老熬夜

小天同学

健康 个人感悟 4月日更 熬夜

从一个创业者的角度看国外爆火音频实时聊天APP-ClubHouse,真香

Langer

产品推荐 产品策略 语音社交

Linux内核的进程负载均衡机制

赖猫

Linux Linux内核 linux学习

企业签频繁掉签,何处是出路?

风翱

ios 4月日更 企业签 超级签

微服务网关:Spring Cloud Config-配置中心

程序员架构进阶

Spring Cloud 源码解析 配置中心 28天写作 4月日更

华仔架构训练营作业(模块一)

不听不听王八念晶

有点东西,《阿里内部Redis学习笔记》这本笔记还融入了大量高并发系统的设计、开发及运维调优经验

Java架构师迁哥

带你厘清事务一致性(中篇)

小舰

4月日更

自定义 Grafana Home 页面

耳东@Erdong

Grafana 4月日更

Eric Evans:领域驱动设计的实践_语言 & 开发_Jan Stenberg_InfoQ精选文章