写点什么

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:002776

评论

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

MySQL进阶之道,MySql性能实战源码+笔记+项目实战

程序知音

Java MySQL 数据库 后端

玩转服务器之Docker篇:10分钟学会搭建 Docker 环境

京东科技开发者

云计算 容器 Docker 镜像 企业号 4 月 PK 榜

Qz学算法-数据结构篇(引入)

浅辄

数据结构 三周年连更

OpenHarmony开发者大会举办,OpenHarmony项目群授牌30家捐赠单位及个人

最新动态

矢量图片转换工具:Vector Magic 免激活版

真大的脸盆

Mac Mac 软件 图片格式转换 图片格式

熬夜肝到秃头!阿里顶配级Spring Security笔记

程序知音

Java spring 后端 spring security java架构

小技巧:如何让 Windows 应用程序在 Parallels Desktop 中启动得更快

互联网搬砖工作者

中国边缘云公有云服务市场 Top2,百度智能云让智算无处不在

百度开发者中心

云计算 #百度智能云# 边缘云

数字化转型框架如何搭建?

优秀

数字化转型

Backgrounds——为所有人准备的mac动态壁纸,让桌面更生动

互联网搬砖工作者

从 Dev 和 Ops 视角出发,聊聊 DevSecOps 的 What / Why / How

极狐GitLab

DevOps 安全 DevSecOps 安全左移 安全合规

重新学习Java线程原语

码语者

Java 线程

使用depay信用卡开通chatGPT付费API

石云升

AI ChatGPT 三周年连更

电子元器件“切开后”,原来是这样子的!

元器件秋姐

科普 三极管 元器件 二极管 电感

深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。

汀丶人工智能

人工智能 深度学习 学习率 warmup batchsize

常用测试策略与测试手段

测吧(北京)科技有限公司

测试发开

“亮相”欧洲!TDengine 在 KubeCon 与开发者探讨云原生与数据库的技术结合

TDengine

tdengine 时序数据库 KubeCON

企业级无代码平台,「重塑」软件生产关系

ToB行业头条

白盒的测试方法

测吧(北京)科技有限公司

测试

户外led电子屏未来发展趋势

Dylan

技术 LED显示屏 户外LED显示屏

如何从1到99做好产品 | 得物技术

得物技术

《一时重构一时爽,一直重构一直爽》

后台技术汇

代码重构 软件重构 三周年连更

聊聊 CSS 隐藏元素的 10 种实用方法

茶无味的一天

CSS 隐藏元素

如何在页面中监听“不存在”的 DOM 节点

茶无味的一天

JavaScript DOM web api 水印 MutationObserver

带你掌握数仓的作业级监控TopSQL

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

【重磅】针对小微企业信息安全,行云管家堡垒机隆重推出免费版

行云管家

云计算 企业上云 安全运维 运维安全

迪斯克分投趣模式挖矿分红dapp系统开发功能详情

开发v-hkkf5566

微服务 Spring Boot 整合Redis 实战开发解决高并发数据缓存

Bug终结者

redis缓存 三周年连更

今晚直播 | 思码逸陆春蕊:面对研发效能度量落地难点,如何让数据说话?

思码逸研发效能

研发效能

详解数据结构中栈的定义和操作

华为云开发者联盟

数据结构 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Gartner发布中国容器管理平台供应商识别指南,灵雀云实力入选

York

容器 云原生 系统架构 研究报告 平台选型

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