10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

DDD 项目失败的几个原因

  • 2020-05-09
  • 本文字数:1955 字

    阅读完需:约 6 分钟

DDD 项目失败的几个原因

为什么想写这个,主要是感受到同志们的学习高潮,恨不得各种练习,但又遭遇到一些挑战,比如“我想在项目中推行 DDD,但担心其他人不配合”,“DDD 门槛太高,概念多”…



就笔者之所见,一个标榜实践 TDD 的项目要不是口号,噱头,要不就失败了,如同要推行 DDD 的一样。项目不是兵器的练兵场,首先要回到“问题域”,要解决什么问题。


一个以推行 DDD 为目标的项目,总觉得有点慌。


就笔者之所见所闻,有 1 个典型的推广 XXX 的 case。


一个是某司的一位空降 boss,是一位有创派别的国内“敏捷”专家。当然,敏捷专家几乎都耻于谈敏捷 ,这样也就和其他人谈的“敏捷”无法区分开去。空降 boss 一来就感觉到这个团队在代码匠艺 、发布、甚至设计抽象都存在某些不足,于是大谈敏捷实践和各种老外前辈云云,但却被团队吐槽,因为那会这群码农最关心的是“生存问题”,去总部找活回来干的问题 。几个月后这位 boss 转变了思路,通过抓稳定迭代的 release,促进快速反馈“挽尊”,此是后话。


这个 case,让人懂得了 一个道理,一位病人发烧了,医生可以先采取措施让他退烧,然后治疗。病人并不喜欢医生跟他讲中西医区别,药理知识。第二个道理就是,鸡蛋好吃,你非要去分辨是那只鸡下的蛋,并无多大必要。


团队员工的期待是空降老板给我们指方向,找活干,加薪而不是推广敏捷 。


同理,江湖上流传着这样的说法:


老板看问题的视角是,“这个需求很简单,怎么实现我不管”。


某些技术人员的视角可能是,“十八般武艺都用,至少面试用得着”。


另外很诡异的一个点在于,人类对于所谓 “建议”往往听不进去,然后总会找到一堆来证伪,然后又乐此不彼的“学习着”,争论他认为对的观点…


笔者自己也做过推广 XXX 的事情,持续集成。这东西大家都知道,我们之前有一个简单的规约,就是每天下班前的构建要绿色 ,单元测试和接口测试都得通过。好些同学怨声一片,代码都写不完,干嘛还要去写测试代码?尤其是之前测试代码覆盖率巨低的系统,几百个测试 case 不通过的系统 …


采取简单粗暴的每天强制的方式,存量用例设定计划治理,研发同学不情愿的被要求每天跑 CI…在大显示屏的曝光和强迫之下,持续了半年多… 后来有项目团队主动分享 CI 带来的好处,测试代码在他们后面的重构过程中发挥了作用,心里有底多了。


这个故事让我“自以为是”的懂得了第二个道理,让人懂得或者转变是很难的,猴子自己上树和抽猴子屁股上树的区别。如果你拿着香蕉在猴子面前晃,就不一样了。


Greg Young 先生有一个 presentation ,主题就是“


7 Reasons Why DDD Projects Fail“,简单总结 DDD 失败的要点:


Lack of intent(缺乏意图)


Anemic Domain Model(贫血模型)


DDD-Lite


Lack of isolation (缺乏隔离)


Ubiquitous what?


Lack of refinement(缺乏完善)


Proxy Domain Expert (Business analyst)


笔者稍微谈一下自己的理解。


1、首要解决通用语言 UL(Ubiquitous Language 问题,统一域语言。


张逸老师指出,统一语言是提炼领域知识的产出物,获得统一语言就是需求分析的过程,也是团队中各个角色就系统目标、范围与具体功能达成一致的过程。使用统一语言可以帮助我们将参与讨论的客户、领域专家与开发团队拉到同一个维度空间进行讨论,若没有达成这种一致性,那就是鸡同鸭讲,毫无沟通效率,相反还可能造成误解。因此,在沟通需求时,团队中的每个人都应使用统一语言进行交流。


可以想象一下,做支付、银行、电商行业的朋友在谈及记账、清算、结算、核算这些词的时候是否是一个明确统一的含义。一旦确定了统一语言,无论是与领域专家的讨论,还是最终的实现代码,都可以通过使用相同的术语,清晰准确地定义领域知识。重要的是,当我们建立了符合整个团队皆认同的一套统一语言后,就可以在此基础上寻找正确的领域概念,为建立领域模型提供重要参考。


2、没有基于通用语言建立的所谓的聚合,实体,值对象,只能算是 DDDLite,只是技术层面的一种设计方式。


3、要解决好隔离问题,则需要以一种最宏观的角度去对“问题域”进行拆分,来划分“界限上下文”,最终形成一个具有俯瞰视角的“上下文映射图”。这里特别说一下“界限上下文”和问题域、以及服务谁,产生什么价值息息相关。比如一个采用第三方支付(支付宝)的网站,并不对支付宝背后的网联,以及银行渠道进行建模。


4、refinement 的问题


架构腐化见怪不怪,如何领域层腐化了就“烂到跟上”。笔者见过一个系统,初期磨拳搽掌,建造者经验丰富,算是很成功的开端。但是若干年后这个系统 domain 层的代码和当初的领域模型图大相径庭,面目全非。持续的 refinement、保鲜非常重要。


另外,前几天和一位 TL 聊天,他说,我很注重代码追求的,为什么 1 年多我没怎么看代码,他们完全不是按照我想象的样子在写代码。


本文转载自技术锁话公众号。


原文链接:https://mp.weixin.qq.com/s/39Xqd9bVtTAGzXn1B_vxkg


2020-05-09 16:001388

评论

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

运维提效技巧:用标签给资源 “归类”,关联告警模版省心又省力

华为云开发者联盟

具身智能竞速时刻,百度百舸提供全栈加速方案

科技热闻

SSL证书安装不成功是怎么回事?有哪些原因?

国科云

腾讯云EdgeOne:个人用户的加速与安全利器,免费开启一站式边缘优化

穿过生命散发芬芳

EdgeOne

海外品牌声誉管理新思路:社交媒体监控的精准化转型

沃观Wovision

社交媒体 海外舆情监控 沃观Wovision 舆情监测系统

用好CAD图层特性管理器,绘图更高效!

在路上

cad cad看图 CAD看图王

全球社交媒体监控如何帮助政府把握国际舆论脉搏?

沃观Wovision

海外舆情监控 沃观Wovision 舆情监测系统

Apache RocketMQ EventBridge:为什么 GenAI 需要 EDA?

阿里巴巴云原生

阿里云 云原生 Apache RocketMQ EventBridge

【8.14 直播】快速上手 IoTDB 官方可视化工具 Workbench

Apache IoTDB

鸿蒙NEXT开发中使用星闪服务

最新动态

CAD中如何修改图层的颜色、线型和线宽?

在路上

cad CAD看图王

深度学习在计算机视觉领域的现状与未来

qife122

深度学习 CVPR

混合云是什么意思?有哪些利弊?

行云管家

云计算 数字化 云服务 混合云

搭建人文社科学生与AI时代的实质性连接,南京财经大学的这门“新文科”课程这样做

ModelWhale

人工智能 南京财经大学 文科+AI 文科

主流内网穿透方案横评对比,远程访问NAS用哪种?

科技热闻

VectorDB+FastGPT一站式构建:智能知识库与企业级对话系统实战

科技热闻

谷歌全面推进 Photo Picker,安卓隐私权限进入新阶段

科技热闻

计算机视觉前沿:自监督学习与高效学习挑战

qife122

计算机视觉 自监督学习

邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!

阿里巴巴云原生

阿里云 云原生 Spring AI Alibabab

Apache DolphinScheduler 7 月社区月报 | 关键修复与性能优化全面推进

白鲸开源

Java 大数据 开源 大数据任务调度 Apache DolphinScheduler

SeaTunnel MCP Server 入选《中国信通院开源商业产品及企业典型案例集(2025)》

白鲸开源

AI 开源商业化 Apache SeaTunnel 白鲸开源 MCP Server

为什么你拿捏不住客户的“真”需求?

IPD产品研发管理

产品 产品经理 产品设计 需求 软件研发

低代码平台赋能高校学生,构建职业能力与企业需求的动态适配

中烟创新

响应“人工智能+”,枫清科技行业智能体赋能政企AI规模化应用

Fabarta

人工智能 智能体

GreatSQL备份报错"PROCESS权限不足"分析与解决

GreatSQL

INTERSPEECH 2025 | 数据堂诚邀您参加MLC-SLM挑战赛暨研讨会

数据堂

人工智能 Interspeech2025 语音研究

云监控(CES)2025年7月全新升级

华为云开发者联盟

从东南亚出发:小程序容器技术如何助力 App 快速打入全球市场?

Byte_Me

小程序 App 出海

监控系统如何选型:Zabbix vs Prometheus

巴辉特

Prometheus zabbix

Qwen3-Coder-480B-A35B-Instruct发布,可能是目前最好的编程模型

qife122

人工智能 开源

硬件成本降52%,快钱支付引入OceanBase后的降本增效

老纪的技术唠嗑局

数据库设计 OceanBase 开源

DDD 项目失败的几个原因_行业深度_技术琐话_InfoQ精选文章