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

news/2024/11/13 14:04:49/文章来源:https://www.cnblogs.com/xiaoweiyu/p/18395637

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

  1. 最新文章更新;

  2. DDD框架源码(.NET、Java双平台);

  3. 加群畅聊,建模分析、技术实现交流;

  4. 视频和直播在B站。

开个玩笑

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

===

前提条件

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

  1. 软件系统是长期迭代的

  2. 软件系统是业务向的系统

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

  1. 我们认为迭代成本是软件成本的重要组成部分

  2. 我们认为自己打造的软件系统的业务复杂度高于技术复杂度

成本与复杂度

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

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

  1. 复杂度不可被消除,只可被转移

  2. 尊重业务固有复杂度

  3. 避免引入额外技术复杂度

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

  1. 系统复杂度与元素的数量和元素的关系有关;

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

===

核心观点

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

  1. 领域驱动设计是一种价值观

  2. DDD价值观:边界明确是最重要的事

  3. 软件长期主义:可维护性是最重要的事

  4. DDD是软件工程的第一性原理

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791943.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI视频分析解决方案

AI视频分析解决方案在视频行业的使用已经逐步步入大家的日常生活、面部识别、个人行为分析、车辆识别等场景。AI视频分析解决方案可以应用于包含前端处理和后台预警提醒、监控视频、视觉系统等。AI视频分析解决方案根据视频流分析,捕获脸部,检验照片中的脸部,并标识脸部外框…

VMware ESXi 8.0U3 macOS Unlocker 标准版和厂商定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 8.0U3 macOS Unlocker 标准版和厂商定制版更新 OEM BIOS 2.7 支持 Windows Server 2025VMware ESXi 8.0U3 macOS Unlocker 标准版和厂商定制版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版…

【Java】若依(ruoyi)——3.项目启动(前后端分离版)

之前,已经讲到了启动前后端不分离版。接下来说一说,下载前后端分离版。 前提 已经下载了ruoyi前后端分离版源码(https://gitee.com/y_project/RuoYi-Vue) 系统环境符合要求(JDK >= 1.8 , MySQL > 5.7 , Maven >= 3.0,Node >= 12, Redis >=3) 已安装开发工具…

在.Net Core当中的WebApi 的模型绑定各种示例用法 以及使用场景

前言: 在.NET Core中的Web API中,模型绑定是一种将客户端发送的数据(如JSON、XML等)转换为C#对象(通常是模型类)的过程。这个过程允许你以更结构化和类型安全的方式处理请求数据。以下是一些模型绑定的示例用法和使用场景。 1. 基本模型绑定 使用场景:最常见的场景是当你…

信奥赛陈老师解一本通题: 1070:人口增长

​ 【题目描述】我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?保留小数点后四位。【输入】一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。【输出】输出最后的人口数,以亿为单位,保留到小数点后四位。1<=x<=100,1<=n<=100。【输…

南沙C++陈老师解一本通题:1063:最大跨度值

​ 【题目描述】给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。【输入】一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。【输出】输出一行,表示序列的最大…

南沙C++陈老师解一本通题:1091:求阶乘的和

​ 【题目描述】给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+...+n!),输出阶乘的和。【输入】输入有一行,包含一个正整数n(1 < n < 12)。【输出】输出有一行:阶乘的和。【输入样例】 5 【输出样例】 153#include <iostream> using namespace st…

南沙信C++陈老师解一本通题:1091:求阶乘的和

​ 【题目描述】给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+...+n!),输出阶乘的和。【输入】输入有一行,包含一个正整数n(1 < n < 12)。【输出】输出有一行:阶乘的和。【输入样例】 5 【输出样例】 153#include <iostream> using namespace st…

南沙信奥塞陈老师解一本通题:2032:【例4.18】分解质因数

​【题目描述】把一个合数分解成若干个质因数乘积的形式(即求质因数的过程)叫做分解质因数。分解质因数(也称分解素因数)只针对合数。 输入一个正整数n,将n分解成质因数乘积的形式。【输入】一个正整数n。【输出】分解成质因数乘积的形式。质因数必须由小到大,见样例。【输入…

【题目全解】蓝桥杯24省赛C++中高级组题干题解

本帖只提供六道编程题的解题思路,部分题目并不提供实际的代码(因为我赛时忘记把代码截图下来了)。T1 - 看书 题干描述: 一本书共 \(n\) 页,小明计划第一天看 \(x\) 页,此后每一天都要比前一天多看 \(y\) 页,请问小明几天可以看完这本书? 输入格式: 一行输入三个整数 \…

学习笔记-气象雷达波段简介

“雷达”一词源自英文Radar(radio detection and ranging),表示无线电探测和测距。 雷达是主动遥感仪器。雷达发射电磁波,然后接受探测粒子散射的电磁波,通过分析返回电磁波信号的时间、位相、频率、强度等的变化,来对粒子的位置、速度、状态等信息进行探测。 由于不同粒子…

Max–min 不等式,KTT 条件,以及不等式的对偶形式

嚙踝蕭嚙踝蕭打打だいず - Worlds end loneliness 打打 的 音 色太 具 代 表性 而且在这么高的 BPM 还能表达出清晰的感情,真乃神曲 . 依旧是笑林广记: 老僧往后园出恭,误被笋尖搠入臀眼,乃唤疼不止。小沙弥见之,合掌云:“阿弥陀佛,天报。” 在三次互反律证明之前发现有…