AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

DDD 被高估了吗?

  • 2021-03-25
  • 本文字数:1222 字

    阅读完需:约 4 分钟

DDD被高估了吗?

本文最初发布于 INNOQ 博客,经原作者授权由 InfoQ 中文站翻译并分享。


领域驱动设计(DDD)最近越来越受欢迎,新出版的图书、会议演讲以及大量培训就是证明。


虽然很长时间以来,我一直都非常推崇这种方法,但最近,一些人对待它的方式让我恼火。


确切地讲,DDD 这种模式语言为许多知道如何做但不知道如何有效沟通协调的开发人员和设计人员提供了明确的语言。


但我生气的是,最近,似乎任何时候,当有人谈论如何设计系统或服务边界,或者只是提到非技术设计时,每个人都感觉不得不引进 DDD 专家——好像他们是唯一可以设计这些东西的超级英雄。这和其他类似的情况一样糟糕,你盲目地应用当前流行的解决方案,仅仅因为它是每个人都在谈论的事情,而不是因为它是这项工作的正确解决方案。


DDD 很棒,但它只是你应该注意的众多工具和技术之一。


在 DDD 的战略维度中,最常用的工具是“有界上下文”的概念——一个给定的模型通常可以,而且应该被细分为更小的单元,每个单元为特定的概念赋予符合它们自己上下文的特定含义。好主意!这(当然)也不是 DDD 的发明:它只是简单的模块化设计,已经被设计大型系统的人们应用了几十年。


这是否意味着有界上下文的概念有问题呢?不,事实上,该模式的目的是为已经存在并证明了其价值的东西命名。我并不是说有界上下文有什么问题,我只是想指出,有些人可能在没有使用或甚至不知道这个特定称谓的情况下做了出色的系统设计。


在战术层面,人们忽略了一个更重要的方面,特别是当他们将 DDD 作为设计入门时。DDD 强调命名的重要性,并建议你在设计中尽量使用一种通用的、普遍存在的语言。但对于系统设计领域,它也使用自己的语言——诸如有界上下文、聚合、实体、值对象等概念。虽然这些都很好,但它们只是一种可行的语言。将一个值对象称为值对象是有价值的,如果这是一个很多人都理解的术语,就会有助于交流。


但是,现有的、常见的 DDD 概念并不是你唯一应该考虑的概念——它们只是设计和架构系统时一些非常常见的特征的范例:提出并识别模式,给它们起个名字,并使用它们来给出系统结构,保证系统统一性。如果在你的架构中,有一种常见的模式,你使用一个 Filter 将请求路由到一个 Handler,或是使用一个由 Agent 处理的概念 Document,那么这类事情可能会多次发生,和服务或存储库在同一层次上,最终变成对你而言更重要的东西。这很好!


我们可以并且应该发明自己的语言,这种思想比许多天真的 DDD 从业者所认为的要重要得多。我相信 DDD 专家对此非常了解,并将任何 DDD 材料视为起点,而不是最终结果。但是,如果你所做的一切都是按照现有的 DDD 标准术语定义,并试图将任何问题都硬塞到现有的结构中,那么你的生活将非常悲惨。


将 DDD 作为工具集的一部分,但要确保你不会止步于此。有一种生活超越了 DDD。并不是每一个好的设计都需要领域驱动(尽管我认可它应该总是由领域驱动的,只是不一定是 DDD 意义上的)。即使你不是 DDD 专家,也可以设计出好的系统。


原文链接:


https://www.innoq.com/en/blog/is-domain-driven-design-overrated

2021-03-25 11:223397
用户头像

发布了 741 篇内容, 共 479.8 次阅读, 收获喜欢 1549 次。

关注

评论 3 条评论

发布
用户头像
DDD在思想上创新不多,最大的贡献是规范化命名。
最可恶的是有些人故意讲得玄幻。
门槛高的技术都是必死的。
2021-10-12 20:23
回复
用户头像
DDD 很棒,但它只是你应该注意的众多工具和技术之一。
2021-03-29 15:37
回复
用户头像
骂得好,为了用而用,为了KPI而用,为了吹牛逼而用,为了学习新知识而用,都是不负责的表现
2021-03-26 15:07
回复
没有更多了
发现更多内容

前端监控之性能与异常

京东科技开发者

监控 服务端 页面 企业号 2 月 PK 榜 js代码

基于selenium的UI自动化实践

Python 自动化测试 selenium

春季3月 · CSPO认证周末班【提前报名特惠】“价值交付课程” | 全国招生

ShineScrum

产品经理 PO Product Owner 产品负责人 产品愿景

2023年关于身份安全的4 个预测

HummerCloud

打造江西数智产业高地,百度飞桨人工智能产业赋能中心落户南昌青山湖

飞桨PaddlePaddle

飞桨 PaddlePaddle

MySQL事务的12连问,你顶得了嘛

采菊东篱下

MySQL java面试

ChatGPT“狂飙”出圈,快来分享你眼中的ChatGPT吧!

InfoQ写作社区官方

热门活动 ChatGPT

Python基础知识入门(一)

漫步桔田

测试角色在项目各阶段的项目管理tips

京东科技开发者

项目管理 测试 测试 单元测试 企业号 2 月 PK 榜

Flink CDC+Kafka 加速业务实时化

Apache Flink

大数据 flink 实时计算

Serverless Kubernetes的思考与征程

阿里技术

Kubernetes Serverless

互联网企业如何进行数字化转型?业务需求迭代频繁的应对之策!

优秀

数字化转型 互联网行业

中移链结合CA证书实现节点准入控制

BSN研习社

EasyNLP集成K-Global Pointer算法,支持中文信息抽取

阿里云大数据AI技术

人工智能 深度学习 信息抽取 算法模型 企业号 2 月 PK 榜

爆肝!《Java权威面试指南(阿里版)》,冲击“金三银四”有望了

程序知音

Java java面试 java架构 后端技术 Java面试八股文

Selenium启动IE11常见问题解决方法

自动化测试 selenium IE

Pycharm+PyQt5+Python3.5开发环境配置(详细教程)

Python pycharm 环境安装 PyQt PyQt5

春季3月 · CSM认证周末班【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum

ScrumMaster CSM

手把手教你为基于Netty的IM生成自签名SSL/TLS证书

JackJiang

龙蜥开发者说:为爱发电!当一个龙蜥社区打包 Contributor 是怎样的体验?| 第16期

OpenAnolis小助手

Linux 开源 rpm 龙蜥社区 贡献

最佳实践|用腾讯云智能文字识别实现网约车信息管理

牵着蜗牛去散步

人工智能 腾讯云 腾讯 最佳实践 文字识别

DevEco Studio 3.1 Beta1版本发布——新增六大关键特性,开发更高效

HarmonyOS开发者

HarmonyOS

英方软件加入龙蜥社区,联手夯实数字基础设施坚实底座

OpenAnolis小助手

开源 数据复制 英方软件 龙蜥社区 CLA

一文详解 Netty 组件

京东科技开发者

Java 架构 Netty nio 企业号 2 月 PK 榜

2023 最新 Java 中高级1000道面试题目汇总解答

架构师之道

java面试

集度汽车 Flink on native k8s 的应用与实践

Apache Flink

大数据 flink 实时计算

“四维一体”,银行数据使用安全新姿势|盾见

极盾科技

数据安全

即时通讯技即时通讯技术文集(第8期):移动端弱网优化系列 [共14篇]

JackJiang

秒懂算法 | 基于朴素贝叶斯算法的垃圾信息的识别

TiAmo

机器学习 算法 过滤算法

Jmeter安装配置详细教程

Jmeter 性能测试 接口测试

BSN-DDC基础网络详解(三):注册门户账号和业务开通(2)

BSN研习社

BSN-DDC

DDD被高估了吗?_架构_STEFAN TILKOV_InfoQ精选文章