【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

DDD 返工

  • 2018-10-01
  • 本文字数:1872 字

    阅读完需:约 6 分钟

本文要点

  • 类似领域的两个独立项目,都使用 DDD 实现,这提供了一个有趣的机会,可以从失误中学习,从而做得更好。
  • 有界上下文没有用在第一个项目中,因为那需要客户认同构建更小的系统。
  • 这两个项目的最大不同是采用有界上下文以及创建一个反腐层。
  • 通用语言仅限于有界上下文中。虽然有些术语可以在一个宽泛的领域内使用,但是定义会大相径庭。

Explore DDD 2017 大会上, Jimmy Bogard 谈到,他们获得了一个少有的机会,使他们可以在一个项目中进行他所谓的“返工(do-over)”。虽然不是完全从头开始重写,但他是参与了相关公司的两个非常类似的项目。InfoQ 采访了 Jimmy,了解他们如何运用从第一个项目中获得的经验教训使第二个项目取得更大的成功。

InfoQ:“如果我们可以把一切重新来做……”,这是那些从事大型软件项目开发的人常说的一句话。那种事后智慧通常可以为将来的项目提供指导。你们获得了一个少有的机会,可以在几年内实际从事两个客户和领域都几乎相同的项目。您能介绍下你们的客户、项目和主要目标吗?

Jimmy Bogard:最终用户是德州政府雇员,跨越许多不同的地理边界。第一个系统是面向青少年的案件管理系统,涉及法律程序的各个方面。这个青少年系统的整体目标不是惩罚,而是为违法的孩子提供帮助。客户包括州主要都市地区的县以及一个负责监督每个县的程序的州属机关。

第二个系统限制更多一些——为德州的县检察部门提供一个仅供他们使用的单一系统,而且仅用于成人程序。

InfoQ:当第一个项目在 2007 年启动时,DDD 还是一个相当新的理念。您的团队、客户对于 DDD 概念,如领域模型、通用语言、有界上下文,处于什么经验水平上?

Bogard:技术负责人(我自己)和架构师有几年构建 DDD 系统的经验。我的第一个 DDD 项目是在 2005 年,我还向那个项目的产品团队介绍了 XP 和 Scrum。对于有界上下文,我们就没有多少经验,虽然社区那会更关注结构化模式。

InfoQ:在这个过程中,您认为你们的经验水平导致了什么重大的失误吗?例如,所遵循的设计和开发实践导致了不必要的软件复杂度。

Bogard:不,没有。设计概念需要经过几个项目的迭代才会变成今天的样子。最大的错误——没有有界上下文——那会需要客户认同构建更小的系统。那没有发生。此外,我们非常谨慎,只构建我们需要的东西,并且根据我们知道的假设进行设计。由于范围太大,所以我们知道,如果没有完成比赛的希望,我们就不可能获得金牌,因此,我们尽力推迟复杂的需求。

InfoQ:该系统的构建和付款都是在一个机构完成的,但需要满足其他各种组织的需求。这导致领域模型设计做出了什么妥协吗?使用的语言真的是通用的吗?

Bogard:当然,这导致了设计上的妥协。有时候,我们的设计有点天真,一旦我们了解了一个方面的所有领域,我们就会看到,其设计与系统的其他部分基本上是不相容的。因此,我们就得妥协。在语言方面,我们发现,虽然术语是通用的,但背后的意思可能不同。只有把各个领域的专家都聚到一个屋里来,那才会显现出来。我们遇到过,每个人都认为他们同意了,但在会议结束时,没人同意。

InfoQ:在您的第二个项目中,方法上有哪些主要的差别,尤其是从 DDD 的角度来看?这些差别是如何反映在现实生活中的?

Bogard::最大的差别是采用了有界上下文。我们在我们的系统和其他系统之间构建了一个反腐层,这样,当其他机构要和我们的系统连接时,就可以使用他们熟悉的术语和设计,但是我们内部会转换。例如,执法人员和检察人员都有“违法(offense)”的概念。在实际的系统里,我们会分成两个概念,因此,有两个名为“违法”的领域对象——一个面向执法人员,一个供我们自己使用。把它们分开,意味着我们可以单独修改其中一个而不影响另一个。

InfoQ:和严格遵循模式的第一个项目不同,您的第二个项目采用了更为务实的做法。对于完成项目满足客户需求并保证代码高质量、可维护,您有什么建议吗?

Bogard:那些项目是马拉松,而不是冲刺。要采用更偏向产品思维而不是项目思维的方法,设计要长远考虑,但要围绕我们已经做了验证的假设。如果我们有了新的发现,那么我们要制定计划把那些变化包含进来,而不是让我们的设计随着时间推移慢慢坏掉。

InfoQ:有些读者希望更多地了解您遵循的设计建议,您有什么要推荐的吗?

Bogard: SOLID 架构:分片而不是分层。

关于受访者

Jimmy Bogard 是 Headspring 的首席架构师,《MVC 实战》一书的作者。同时,他还是一名国际演讲者和多产的 OSS 开发人员。他是分布式系统、REST、消息传递、领域驱动设计、CQRS 方面的专家。

查看英文原文: The DDD Do-Over

2018-10-01 18:407846
用户头像

发布了 1008 篇内容, 共 374.1 次阅读, 收获喜欢 340 次。

关注

评论

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

【堡垒机】2022年云堡垒机品牌排名大比拼!

行云管家

云计算 网络安全 堡垒机 企业安全

飞桨助力动车3C车载智能识别,为动车组运行保驾护航

百度大脑

Rust基本概念

Shine

读书笔记 rust

图数据库实操:用 Nebula Graph 破解成语版 Wordle 谜底

NebulaGraph

数据库 开源 图数据库 分布式图数据库

常见问题(FAQ)页面的搭建步骤

小炮

大疆被制裁,请马上卸载postman!

Liam

程序员 Postman 开发工具 API swagger

云原生技术赋能ISV实现应用现代化

York

云原生

移动平台WorkPlus助力医院智慧信息化建设

WorkPlus

向工程腐化开炮|动态链接库so治理

阿里巴巴终端技术

android 动态链接库

AI+生物计算:用计算机视觉技术理解细胞生命

百度大脑

如何基于 OpenKruise 打破原生 Kubernetes 中的容器运行时操作局限?

阿里巴巴云原生

2022年中国在线音乐市场年度综合分析

易观分析

2021年【大学生Python学习】社区&&小博主,2021最新大厂高频微服务面试总结

程序媛可鸥

Python 程序员 面试

它来了,它来了!开源圈 KOL 的江湖对谈第二季要来了!

OpenTEKr

开源 程序员人生 开源社区 开源软件 优秀开源项目

2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml

MASA技术团队

创新的力量天翼云推动科技创新技术实践落地

天翼云开发者社区

从“半部电台”到“云监工” 天翼云助力红色电信启航新征程

天翼云开发者社区

2022年中小企业数据安全如何保障?对比华为云与其他云计算大厂,15分钟的字节跳动视频面试

程序媛可鸥

Python 程序员 面试

对话|鲜丰水果:“看不见”的门店数字化

阿里云云效

云计算 阿里云 云原生 持续交付 数字化运维

3个月夯实基建,鲜丰水果这样实现研发数字化

阿里云云效

云计算 阿里云 云原生 持续交付 研发运维

CVE-2021-3129:Laravel远程代码漏洞复现分析

华为云开发者联盟

安全 漏洞 代码复现 CVE-2021-3129 base64 标准

社区活动 | Apache Pulsar SIG(特别兴趣小组开放)!欢迎大家加入

Apache Pulsar

开源 架构 云原生 Apache Pulsar pulsar 社区

全运会开幕!天翼云全力打造“智慧赛事”

天翼云开发者社区

微博评论高性能高可用计算架构

李大虾

#架构实战营 「架构实战营」

加密市场普跌 虎符交易所平台币HOO却能连续2个月逆势上涨

区块链前沿News

Hoo 虎符交易所 平台币

云管平台提供的功能一般包括哪些?采购需求主要是什么?

行云管家

云计算 企业上云 云管平台 云管理

Flutter 图片库高燃新登场

阿里巴巴终端技术

flutter

4个迭代,从批量交付到持续交付转型

阿里云云效

云计算 阿里云 云原生 研发团队 研发

沈阳飞桨领航团Meetup邀请你来,探索AI如何赋能智慧城市

百度大脑

昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!

Geek_32c4d0

昇腾

使用MASA.Blazor写一个标准的查询表格页

MASA技术团队

DDD返工_研发效能_Thomas Betts_InfoQ精选文章