DDD 到底啥,有啥用

2022-03-29 17:57:40 +08:00
 frank1256

rt

求大佬给我指点指点。

https://i.imgur.com/IJRFbi4.png)

11702 次点击
所在节点    程序员
70 条回复
zzfer
2022-03-29 18:01:59 +08:00
我最近也在学,在看《领域驱动设计》。感觉就像是一种设计模式,也没看明白,等大佬指点。

楼主你这文档能分享吗?
frank1256
2022-03-29 18:06:45 +08:00
@zzfer 这我自己写的疑问,不是文档
BenX
2022-03-29 18:24:22 +08:00
最近也在看

推荐作者 欧创新的书和极客时间上的课程
《中台架构与实现》基于 DDD 和微服务
极客时间课程搜作者。
sadfQED2
2022-03-29 18:41:55 +08:00
忽悠领导,面试忽悠薪资,晋升吹牛逼,就这几个用处
timethinker
2022-03-29 19:02:26 +08:00
总的来说,DDD 分为两个部分,一个是技术实践的战术模式,一个是工程架构的战略模式。

其中,战术模式仅作为实现的部分参考,总结的是以面向对象范式编程语言的一些常用技巧与原则,提炼出了一些可以跟非技术人员沟通的构建单元,也就是你可以跟产品直接聊的一些东西,比如实体、值对象、仓库等等。

其实最重要的是战略模式,这部分也是大多数接触 DDD 的人觉得云雾缭绕的东西,看不见摸不着。团队规模小了,搞这些觉得繁琐,团队规模大了,面对已经成熟的 CRUD 基本上都有一套成熟的流程方案了。所以这个东西真正有价值的还是回归本质,解决软件核心中的复杂性。

首先你得是一个团队,否则的话一个人还搞什么 DDD 对吧?其次对团队里面的人也要有一定的要求,起码在沟通上,要明确价值。也就是说哪些信息对于不同岗位的人来说是明确的,是可以沟通的和达成共识的,哪些信息对开发或者产品来说就是废话,要把能够体现出真正用意的这部分提炼出来,在整个团队中进行传播和理解。

其次,有了高效的沟通和统一的理解以后,才能对同一个事物进行拓展(研发),需要在前者的基础之上,搭建一套能够迅速有效解决问题的工作流程,对产品进行高效的迭代。DDD 的战略部分就是基于前者,然后再结合一些准则和经验,帮助你如何解决更大规模的软件工程问题。

以上这些当然都是很美好的初衷,但是我个人认为,关键变量不在于每次迭代能否更进一步,而在于对人的管理,什么意思呢?人的不确定性才是最大的不确定性,人这个变量的影响范围如果能够控制住,培训也好,工作范围的划分也好,只要能够达到一种“柔性”的状态,终归会回归正轨。

说得有点多了,尽信书,不如无书,要有自己的思考。
shyrock
2022-03-29 19:05:07 +08:00
DDD 的核心就是统一业务和研发的理解,实现一个模型贯穿业务和技术。
是非常理想的建模和开发过程,不过对于业务分析师、架构师和开发人员的要求太高了,很难落地。
debuggerx
2022-03-29 19:08:50 +08:00
@sadfQED2 人间清醒
timethinker
2022-03-29 19:14:25 +08:00
如果我们的眼光只局限在技术层面,那么 DDD 对你而言有用的就是战术模式那一部分,也就是编码的那一部分。如果我们把眼光放高一些,着手解决整个产品研发生命周期的效率方面,或者 DDD 就能帮大忙。这不仅仅使我们工作更加轻松,更加快乐,也使得我们不会把时间浪费在一些经常反复出现并且很愚蠢的事情上面。当然这个愿望很美好,但是不一定每个人都想做得这么美好。
w4n9hu1
2022-03-29 19:16:17 +08:00
一种设计思想,domain driven ,和 restful 相似,是一种面向业务对象的抽象,相比面向过程,复用率更高,容易应对复杂业务需求变动。
WalkerCeng
2022-03-29 19:18:17 +08:00
dddd 懂得都懂
murmur
2022-03-29 19:21:34 +08:00
DDD 软考高级是不是考点啊
debuggerx
2022-03-29 19:23:59 +08:00
不要只想着是不是用 DDD 就真能解决技术问题和项目设计问题,眼界放开阔一点,就像 L4 说的,有没有一种可能,这玩意儿的意义本来就是给某些所谓的技术人提供一条非技术的晋升通道~
yolio2003
2022-03-29 19:58:32 +08:00
还是有点用的,只是难落地。话说如果紧靠吹嘘能让大家都认可,似乎也是个很牛的本事。
testFor
2022-03-29 20:05:44 +08:00
最近在看没看懂,感觉原理是上策,实现是下策,两本看完才有感悟
thinkershare
2022-03-29 20:48:08 +08:00
回到面向对象最初的初衷, 而不是将面向对象写成流程处理模式的事务脚本.
如果你的业务 CURD 能 hold 住用 CURD 的事务脚本模式也没啥问题!
DDD 需要较高的成本, 而且再没有任何基础设施的情况下, 很容易写偏.
不过它的战略模式还是很有用的, 对大部分项目都有一定的参考价值.
我们使用 DDD 写过几个项目了, 框架使用的是 ABP, 团队也在自己重现构建内部 DDD 框架.
主要是团队的人都习惯了强事务一致性的事务脚本, 将多个模型的操作糅合到一个 Service, 导致 Service 变成了大杂烩, 越来越难以维护, 最终不得不研究使用 DDD 做切分, 后来又不得不上 CQRS, 前期阻力比较大, 现在再稳定维护期后, 大家就很爽, 添加功能也变得比原来容易多了.
thinkershare
2022-03-29 20:53:05 +08:00
@frank1256 可以多多交流, 我现在按照 DDD 这套写了也快 5 年了, 蒙蔽的地方还是很多, 但目前刚好能 HOLD 住现在的项目的复杂度. 如果你的项目不是长期维护, 使用 DDD 写是不值得的.
aragakiyuii
2022-03-29 21:00:09 +08:00
我看了 DDD 才知道怎么写 OOP😂
coolair
2022-03-29 21:02:55 +08:00
DDD 这东西并不是最近几年才出来的东西,早在 04 年就有了,只不过现在某些人接着“微服务”这阵风开始炒作了。

国内的 IT 现状目前就是这样,中台火的时候,铺天盖地都是中台,是个公司就要搞中台,好像不搞中台就不是搞 IT 的了,到头来很多公司花了大力气却什么也没做出来,或者做了个创造不了收益的东西出来。

AI 火的时候,到处是 Python ,当然是 Python ,毕竟正儿八经的 AI 还是要点门槛的,那些个鼓吹者就退而求其次,选了 Python 这个标的,培训班如雨后春笋般拔地而起,似乎每个人都得学会 Python ,包括前台文员、幼儿园孩子,好像不会 Python 就啥也干不成似的。

接着就是低代码,那些个平台写的都是写啥玩意,说是产品不像产品,说是工具不像工具。目标定位是抢程序员的饭碗,还是抢 Excel 的饭碗?搞来搞去又是浪费精力整了一堆垃圾。

然后就是 K8S 、Go ,又是铺天盖地的广告、宣传,仿佛大厂招人就以这个为界定,年入几十万不是梦。正儿八经招聘网站一搜,还是 Java 的天下。

在国内,大多数公司,什么设计模式、理念、原理、算法都是扯淡,最后还是八股文走天下,晋升考的是嘴巴和 PPT ,其他都是浮云。
drackzy
2022-03-29 21:05:01 +08:00
方法论、敏捷那一套,换个写法。
frank1256
2022-03-29 21:11:41 +08:00
@thinkershare 我的 leader 想要我去探索 DDD ,让我去吃螃蟹,我看了很多文章,不能够理解 DDD 的意义。大佬你能用通俗易懂的话告诉我,你用了 DDD 后,给你带来的好处?体现在哪里?例如新增需求了,和不用 DDD 有什么不一样。你说的“添加功能容易多了”,具体呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843675

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX