首页 > 其他分享 >图穷匕见-所有反DDD模式都是垃圾

图穷匕见-所有反DDD模式都是垃圾

时间:2024-09-03 23:24:54浏览次数:12  
标签:迭代 复杂度 系统 软件工程 垃圾 图穷匕见 成本 DDD

本文书接上回《主观与客观,破除DDD凭经验魔咒》,关注公众号(老肖想当外语大佬)获取信息:

  1. 最新文章更新;
  2. DDD框架源码(.NET、Java双平台);
  3. 加群畅聊,建模分析、技术实现交流;
  4. 视频和直播在B站。


开个玩笑

“我不是针对这一个问题,我是说所有的反DDD模式都是垃圾”,作为教练,在团队中我时常用这样的玩笑来调侃不符合DDD价值观的判断逻辑和决策结果,并指出具体不符合的点在哪里,由于大家已经相互非常了解,能够很快反应过来并建立共识,从而不断修正决策逻辑和决策结果,使问题的范围和解决方案收敛在一个确定的范围内,持续地保持对系统复杂度的掌控。

图穷匕见-所有反DDD模式都是垃圾_领域驱动设计

前提条件

首先需要对齐我们讨论的场景,主要在下面的条件范围内:

  1. 软件系统是长期迭代的
  2. 软件系统是业务向的系统


在这个条件范围下,我们可以解读为:

  1. 我们认为迭代成本是软件成本的重要组成部分
  2. 我们认为自己打造的软件系统的业务复杂度高于技术复杂度


成本与复杂度

为了尽可能降低系统迭代的综合成本,本质上就是掌控系统复杂度,而系统复杂度由业务复杂度和技术复杂度共同构成。

图穷匕见-所有反DDD模式都是垃圾_领域驱动设计_02

为了实现“掌控系统复杂度”的目标,基于复杂度守恒定律,我们有以下观点:

  1. 复杂度不可被消除,只可被转移
  2. 尊重业务固有复杂度
  3. 避免引入额外技术复杂度


而我们在《关于领域驱动设计,大家都理解错了》一文推导过关于复杂度的结论:

  1. 系统复杂度与元素的数量和元素的关系有关;
  2. 元素的关系对系统复杂度的影响远远大于元素的数量所产生的影响;

图穷匕见-所有反DDD模式都是垃圾_DDD_03

核心观点

如果你已经跟随《老肖的领域驱动设计之路》系列一路读过来,那么我们接下来的推导过程就需要在之前构建的认知基础上进行,这里列出核心观点以供复习:

  1. 领域驱动设计是一种价值观
  2. DDD价值观:边界明确是最重要的事
  3. 软件长期主义:可维护性是最重要的事
  4. DDD是软件工程的第一性原理


基于上面这些观点,DDD的核心,就是掌控系统元素之间的关系,明确边界,将复杂度控制在一个个有限的范围内,完全匹配软件工程的成本控制的逻辑,那么是不是就可以得出下面的结论:

  1. 符合DDD价值观,意味着符合软件工程的成本利益
  2. 反DDD的模式,意味着不符合软件工程的成本利益


那么回到本文的标题,“所有反DDD模式都是垃圾”,更准确的描述应该是“所有反DDD模式都是不符合软件工程成本利益的”,我认为,这个逻辑是成立的。

如果你认同《DDD是软件工程的第一性原理?》一文的观点,那么同样也能得出这样的结论,违反软件工程第一性原理,当然会适得其反,走向系统快速失控的深渊。

所以,很抱歉,如果你的软件设计思维,没有围绕着“明确和维护边界”来开展,那么大概率是错误的价值判断思路,系统的复杂度大概率也很难被掌控,而具象化出来的现象,就是我们常说的“迭代不动了”。

那么,快来和我一起实践DDD吧!



标签:迭代,复杂度,系统,软件工程,垃圾,图穷匕见,成本,DDD
From: https://blog.51cto.com/u_16961816/11911301

相关文章

  • 河道水面垃圾识别检测系统 YOLOv7
    河道水面垃圾识别检测系统采用计算机视觉技术,河道水面垃圾识别检测系统通过在河道上安装摄像头,对水面垃圾进行实时监测。河道水面垃圾识别检测系统通过计算机视觉算法自动识别并记录水面垃圾,及时通知环保部门进行处理。河道水面垃圾识别检测系统24小时不间断运行,能够实时监测河道水......
  • 【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收
    目录......
  • go——GC垃圾回收机制
    堆和栈的区别存储方式栈是线性数据结构、采用先进后出的方式存储数据。栈通常用于存储局部变量、函数的参数,栈上的存储空间是有限且固定的,由编译器和操作系统控制。堆是树型数据结构,用于动态分配和管理内存,堆内存的大小根据需要动态调整,通常比栈大,用于存储复杂的数据结构......
  • JVM/垃圾回收
    Java的垃圾回收模型一、介绍分为栈、堆、本地方法栈、程序计数器、方法区栈区:主要用来存储局部变量和对象地址栈区不仅存储局部变量和对象地址,还存储方法调用的上下文信息。堆区:分为很多个区域,可以存储对象的具体数据等Java虚拟机中内存最大的一块,是被所有线程共......
  • JVM/垃圾回收
    Java的垃圾回收模型一、介绍分为栈、堆、本地方法栈、程序计数器、方法区栈区:主要用来存储局部变量和对象地址栈区不仅存储局部变量和对象地址,还存储方法调用的上下文信息。堆区:分为很多个区域,可以存储对象的具体数据等Java虚拟机中内存最大的一块,是被所有线程......
  • JSP家庭垃圾分类管理系统21wg8(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着城市化进程的加快,生活垃圾产生量急剧增加,其中家庭垃圾占据重要比例。传统的垃圾处理方式已难以适应环保要求,垃圾分类成为解决垃圾......
  • U-Mail垃圾邮件网关:一站式邮件安全防护方案
    在当今的数字化时代,电子邮件已成为企业日常运营中不可或缺的通讯工具。然而,随着电子邮件的广泛应用,垃圾邮件也日益成为困扰企业的一大难题。如何有效防止垃圾邮件入侵,确保企业邮件系统的安全稳定运行,已成为众多企业亟待解决的难题。为了应对这一挑战,U-Mail垃圾邮件网关应运而生,它以......
  • BCB 6.0真的是垃圾么?
    一不留神,看到这个玩意:BCB6.0是垃圾的二十条理由。于是决心废话几句,我只针对他说的那二十条理由,至于后面的关于什么删帖子纭纭,我觉得私人恩怨还是不要跟技术撤上关系比较好。1.IDE经常出现非法操作,有时重起动还会出错,需要重装BCB。有意思的很,很多不太会电脑的朋友问我电脑出现问......
  • 戴尔xps8940机箱只需要两百块,可否让垃圾佬的主机B格提升一个Level
    戴尔XPS8940机箱只需要两百块,可否让垃圾佬的主机B格提升一个Level戴尔xps8940的机箱只需要200块,看到这个价格之后,体内垃圾佬的基因就被激发了出来,你要知道XPS可是戴尔高端的代名词,那如果我把自己的设备装到这款机箱里面,然后把机箱放在桌面显眼的位置,岂不是吊炸天了?大家......
  • 基于Springboot的城市垃圾分类管理系统
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......