GMTC深圳站本周日开幕,14大专题全部上线,完整日程>> 了解详情
写点什么

DDD 被高估了吗?

  • 2021 年 3 月 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 年 3 月 25 日 11:222456
用户头像

发布了 391 篇内容, 共 174.5 次阅读, 收获喜欢 944 次。

关注

评论 3 条评论

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

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java spring 架构 面试 Spring Boot

清华大牛带领20位大厂专家耗时三年整理出这份2000页Java进阶指南

Java~~~

Java 架构 面试 微服务 多线程

TDSQL演进三部曲

腾讯云数据库

tdsql #数据库

实时消息RTM| 多活架构中的数据一致性问题

anyRTC开发者

音视频 WebRTC 数据一致性 实时消息 数据容灾

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

不吹不黑!阿里新产微服务架构进阶笔记我粉了!理论实战齐飞

Java 程序员 架构 面试 微服务

写了一年golang,来聊聊进程、线程与协程

捉虫大师

线程 进程 协程 Go 语言

成为优秀架构师需要具备哪些能力?

卢卡多多

架构师 服务 9月日更

在职字节师兄分享出了这份数据结构手册,LeetCode现已开放下载

Java~~~

Java 架构 面试 算法 刷题

GitHub经典教材!阿里P8的这份SpringBoot精髓到底厉害在哪里?

Java~~~

Java 架构 面试 微服务 Spring Boot

有人在恶意提权吗?

BUG侦探

Linux 主机安全 提权

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

Java多线程:从基本概念到避坑指南

Java 架构 后端 JVM 计算机

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

Java 程序员 面试 后端 计算机

如何实现 Android 短视频跨页面的流畅续播?

阿里云视频云

android App 音视频 Video播放器 APP开发

操作系统的IO模型

Java 程序员 架构 操作系统 计算机

TDSQL云时代,我们需要怎样的数据库?

腾讯云数据库

数据库 tdsql

求阿里大神整理的分布式核心笔记出炉了,GitHub刚发布就标星85k

Java~~~

Java 负载均衡 架构 面试 分布式

一文详述如何卸载SQL Server 2019及其 DBMS

Regan Yue

数据库 SQL语言 9月日更

Alibaba新产!Spring+SpringBoot+SpringCloud全家桶进阶小册

Java~~~

Java spring 架构 面试 Spring Boot

Alibaba内部的10w字Java高频面试手册遭人恶意在牛客网开源下载?

Java~~~

Java 架构 面试 JVM 多线程

26岁!月薪38k,全靠这份GitHub百万下载的阿里P5-P9知识核心手册

Java~~~

Java 架构 面试 微服务 多线程

33张图解析ReentrantReadWriteLock源码

程序猿阿星

源码分析 读写锁 ReentrantReadWriteLock 源码解读

Github星标百万!终于有人将Spring技术精髓收录成册

Java 编程 程序员 架构 面试

GitOps系列|云原生时代,你还不懂GitOps?

极狐GitLab

security CI/CD gitops

在FL Studio中如何使用混音器的效果

懒得勤快

从动物科学到乐队鼓手,腾讯技术小哥的开源人生

腾源会

腾讯云 开源

实用?HUAWEI高工总结出15W字的图解计算机操作系统指南手册

Java~~~

Java 架构 面试 TCP 网络协议

实战 实时物体检测YOLOv3 CNN卷积神经网络John 易筋 ARTS 打卡 Week 63

John(易筋)

ARTS 打卡计划

滴滴最看重的SpringCloud手册曾被疯狂转载,现在学还有用吗?

Java~~~

Java 架构 面试 微服务 Spring Cloud

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

2021星空论坛:破局创新,论道数字化转型

2021星空论坛:破局创新,论道数字化转型

DDD被高估了吗?-InfoQ