阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |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:223217
用户头像

发布了 687 篇内容, 共 396.8 次阅读, 收获喜欢 1498 次。

关注

评论 3 条评论

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

Web Components 系列(十一)—— 实现 MyCard 的可复用

编程三昧

前端 组件化 2月月更 webComponents

政企机构用户注意!蠕虫病毒Prometei正在针对局域网横向渗透传播

火绒安全

局域网共享 渗透 蠕虫 病毒 政企

百年奥运的凌空之美,AI云智剪背后的新算法

阿里云视频云

罗马建立在水渠上:为什么需要优先建设绿色光网?

脑极体

关于 AI 边云协同解决方案的研究与讨论 | 社区征文

liuzhen007

AI 新春征文 2月月更

开源每周问答精选:PolarDB for PostgreSQL 是专门面向 OLAP 场景吗?

阿里云数据库开源

数据库 阿里云 开源 polarDB

剑指Offer——JVM 这些基础知识点你全掌握了吗

No Silver Bullet

JVM 垃圾回收 offer 2月月更

3步教你把个人应用服务部署到云服务器ECS上

阿里云弹性计算

Docker 征文投稿 玩转ECS

面试突击:说一下线程生命周期,以及转换过程?

CRMEB

千万级CPS的开源网络压测软件dperf

百度开发者中心

龙蜥下游发行版 Alibaba Cloud Linux 3 安全基线正式通过 CIS 认证,云上企业安全性保障更上层楼

OpenAnolis小助手

Linux 开源 cis

netty系列之:channelHandlerContext详解

程序那些事

Java Netty nio 程序那些事 2月月更

HTTP流量神器Goreplay核心源码详解

华为云开发者联盟

Go 流量 GOREPLAY TCP/HTTP

Geospatial Data 在 Nebula Graph 中的实践

NebulaGraph

图数据库 知识图谱 分布式图数据库

腾讯音乐知识图谱搜索实践

NebulaGraph

图数据库 知识图谱 分布式图数据库

网络安全kali渗透学习 web渗透入门 NMAP高级使用技巧和漏洞扫描

学神来啦

1分钟了解Prometheus的WAL机制

johncming

Prometheus WAL

Python代码阅读(第75篇):阶乘

Felix

Python 编程 阅读代码 Python初学者 阶乘

iLogtail——一款延迟仅在毫秒级的千万实例可观测采集器利器来了 | 龙蜥技术

OpenAnolis小助手

阿里云 开源 数据采集 技术分享

大咖说|《商业评论》主编颜杰华:如何看待未来商业的管理趋势?

大咖说

大咖说 财经 数智化 商业评论

自我认为挺全面的【Web Service渗透测试总结】

H

网络安全 渗透测试

WeOpen Good 开源公益计划正式启动!聚开源智慧·行科技向善

腾源会

开源 公益 腾源会

学术论坛第七期:基于统计的预测算法

云智慧AIOps社区

统计学 预测模型

图计算 on nLive:Nebula 的图计算实践

NebulaGraph

图数据库 知识图谱 图计算 分布式图数据库

编译ORB-SLAM 3 出现slots_reference错误

Ayosh

slam

35款FL插件免费下载

懒得勤快

Flink on K8s 企业生产化实践|社区征文

张浩_house

flink 特征平台 新春征文

使用goby检测log4j漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

SQL注入如何预防?

喀拉峻

网络安全

一文带你使用 Python 实现Socket编程

宇宙之一粟

Python socket 2月月更

刷屏的“1620”有多难?3D+AI技术带你一秒看懂

百度开发者中心

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