DDD 领域模型的好处到底是什么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mitsuizzz
V2EX    Java

DDD 领域模型的好处到底是什么

  •  1
     
  •   mitsuizzz 2021-05-07 09:03:44 +08:00 6243 次点击
    这是一个创建于 1621 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上说法千奇百怪,DDD 分层导致实体转来转去,标准是什么,好处到底是什么

    28 条回复    2021-05-24 00:42:11 +08:00
    lostSoul
        1
    lostSoul  
       2021-05-07 09:08:30 +08:00
    可以唬住领导
    AlkTTT
        2
    AlkTTT  
       2021-05-07 09:11:17 +08:00   1
    DDD 开篇就说了,要团队内的成员对整个系统的认知要全知全能,业务术语是一致的;
    光这点国内大部分团队都做不到,所以 DDD 对大部分团队是没啥用的,反而会增加代码复杂性,不好接盘;
    zhujq
        3
    zhujq  
       2021-05-07 09:12:56 +08:00
    ryougifujino
        4
    ryougifujino  
       2021-05-07 09:19:39 +08:00
    好处之一是可以避免事务脚本,把业务逻辑以面向对象的形式进行抽象,增强复用性、可测试性。
    timethinker
        5
    timethinker  
       2021-05-07 09:35:57 +08:00   2
    一种方法论,DDD 的作者根据自己的经验提炼得出的一套通用建模方法,分为战术模式( tactical patterns )和战略模式( strategic patterns ),其中战略模式是比较难以理解和抽象的,同时也是最重要。战术模式则可以归结为类似设计模式一样的方法工具。

    难以理解就意味着用的人少,不好推广,可能一些团队的 leader 会强推或者应用其中的一部分,我想说的是放弃它是非常容易的,不对其进行维护就行了,但是重新拾取起来就会非常困难了。就像 TDD 一样,在思维没有转变过来之前,很多人就会认为它是浪费时间浪费成本的开发模式。

    破窗效应所引发的一个结果就是,如果团队中有一个人可以打破规则,并且不受约束和惩罚,那么其他人也会尝试挑战规则,最终的结果就是混乱。
    shijieheping
        6
    shijieheping  
       2021-05-07 09:49:44 +08:00
    @lostSoul #1 哈哈
    easylee
        7
    easylee  
       2021-05-07 09:52:56 +08:00
    DDD 目前在国内“百花齐放”,各种魔改和瞎写,用得极其辣眼睛。
    某某大厂中就是如 @lostSoul #1 所说的,为了KPI 和技术分享好听。
    baiyi
        8
    baiyi  
       2021-05-07 09:55:19 +08:00   2
    DDD 的副标题就是:软件核心复杂性应对之道。很多时候软件的复杂性不在于软件技术的使用,而是业务的复杂性,所以 DDD 就聚焦于业务逻辑,通过各种方法来为业务建模,来保证不会因为业务的巨大复杂性而陷入困境。
    我一直认为我没学会 DDD 的原因之一就是还没遇到过于复杂的业务逻辑......
    buzailianxi
        9
    buzailianxi  
       2021-05-07 09:55:30 +08:00
    唬住领导
    Umenezumi
        10
    Umenezumi  
       2021-05-07 10:01:18 +08:00
    要么全会 DDD,要么全不了解 DDD,不然写出的代码有你受的
    charlie21
        11
    charlie21  
       2021-05-07 10:36:35 +08:00
    一个更好的问题是,就项目负责人而言(他决定是否采用 DDD )
    为什么有的人觉得 DDD 的收益大于成本,为什么有的人觉得 DDD 成本大于收益,依据是什么
    e583409
        12
    e583409  
       2021-05-07 11:27:44 +08:00
    DDD 对于有追求的程序员 还是要学学的
    afewok
        13
    afewok  
       2021-05-07 11:36:40 +08:00
    可以提取一些精华,比如从业务的视角,可以促进产研一起明确业务的核心
    passerbytiny
        14
    passerbytiny  
       2021-05-07 11:47:48 +08:00 via Android   2
    没好处。非但 DDD 没好处,基本上本世纪甚至上世纪 90 年代以来新出的大多数软件领域名词,例如敏捷开发、scrum,都没好处因为它们压根就不是工程技术或者方法,只不过是技术大牛或大厂的经验分享。
    dany813
        15
    dany813  
       2021-05-07 12:05:14 +08:00
    前提对业务很了解才能,DDD
    BeautifulSoap
        16
    BeautifulSoap  
       2021-05-07 12:37:48 +08:00   3
    读过 Eric Evans 的那本领域驱动设计就知道,DDD 的核心不在于分层或者具体的代码实现,而在于整个团队在领域专家的协助下,学习领域知识统一通用语言,共用一个领域模型。这不光要求团队所有成员交流都基于统一的领域模型和通用语言,还要求你的客户(毕竟领域专家基本就来源你的客户)也和你用同一套模型和语言。实际上你想想,如果一个项目能做到上面这些要求,你的项目本来就能减少非常大难度

    之后的分层之类的其实都只是为了在代码上实现更好领域模型的具体方法,而不是 DDD 的核心。可问题在于拜 Eric Evans 那本 DDD 写得实在是过于“高屋建瓴”所致,关于 DDD 到底怎么落地都一直都是个让人头疼的问题。所以才出现了各种各样的不一样的实现方法。也就是所说的用来唬住领导
    ZRS
        17
    ZRS  
       2021-05-07 12:45:16 +08:00 via iPhone
    业务要足够复杂 且有领域专家 DDD 才有用武之地
    JamesChen
        18
    JamesChen  
       2021-05-07 12:57:22 +08:00
    @mitsuizzz 单纯好奇,问个题外话,为什么要拿 Hiberbee 的 logo 做头像?(我项目的 logo 就是找人参考 Hiberbee 画的,哈哈哈)
    FreeEx
        19
    FreeEx  
       2021-05-07 13:02:32 +08:00
    以前是黑猫白猫能抓住老鼠就是好猫,后来有个人说黑猫白猫都不好,能抓老鼠但是把家里弄得一团糟,我们需要分析老鼠的目的,找出老鼠的活动轨迹,划定每一只老鼠的领地,在指定的地方放上猫等老鼠过来,这样既可以抓老鼠,又不会搞乱房间。但是老鼠不听话呀,不按照既定路线走,于是就各种研究怎么样才能按照这种方式抓住老鼠。
    mitsuizzz
        20
    mitsuizzz  
    OP
       2021-05-07 14:46:44 +08:00   1
    @JamesChen 因为可爱 我 idea 的主题就是用的 Hiberbee
    cys02688
        21
    cys02688  
       2021-05-07 15:21:36 +08:00
    ddd 实践其实真的要看公司,得真的有那个环境,最主要的是要让产品和需求习惯这种方式。他们要是习惯了,基本就很好搞了
    lachesis
        22
    lachesis  
       2021-05-07 15:56:49 +08:00
    分层? DDD 不都是六边形架构吗,将所有打平依赖于抽象不再区分高低层。
    如果你说的是不同领域或限界上下文之间的实体聚合转换,然后又觉得明明是同一个东西转来转去,那大概就是上面有人说的战略设计出了问题,上下文没划分好。
    pgcultra1
        23
    pgcultra1  
       2021-05-07 16:20:11 +08:00
    @lostSoul 没错。。。
    cs419
        24
    cs419  
       2021-05-08 08:13:34 +08:00
    爱情就像鬼 相信的人多 见过的人少

    DDD 也这样
    张三说他的项目是基于 DDD 做的 也没觉着很强大
    李四说 那是因为你水平不行 真正的 DDD 很牛掰的

    网上有不少博文写 DDD
    你看不懂,也不好说人家写的不对
    场面是充了,没人能说清楚牛在哪

    感觉 DDD 就像数学界的 xxx 设想
    你一个泡泡 我一个泡泡
    没一个能打的
    bthulu
        25
    bthulu  
       2021-05-08 08:46:21 +08:00
    DDD 就是垃圾中的垃圾, 不服上 github 源码给大伙瞧瞧
    zhognan
        26
    zhognan  
       2021-05-14 11:10:45 +08:00
    DDD 说白了就是一些人吹牛一种理论,如果没有微服务,有可能现在都没有提起,微服务才是一种最佳落地实践,我觉得是微服务拯救了 DDD
    RandomJoke
        27
    RandomJoke  
       2021-05-19 16:50:16 +08:00
    DDD 没有代码上的标准吧,也就思想上的标准,好处就是当系统复杂到一定程度,大家有一套统一的术语理解和沟通,降低复杂系统后续的维护和拓展成本
    chenyang
        28
    chenyang  
       2021-05-24 00:42:11 +08:00
    更容易写到沟里去
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:49 PVG 04:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86