为什么DDD难落地?

news2024/12/28 20:37:55

为什么DDD难落地?

lorne 2023-04-23

 视频地址:

为什么DDD难落地?_哔哩哔哩_bilibili

洋葱架构图:

 

  • DDD能解决什么问题?

其实DDD的核心是:提升业务的聚合性、提升业务的拓展性。

  • DDD的错误认知?
  1. 很多人首先想找一个DDD的框架来学习?
  2. 学习DDD层次和DDD的领域概念?
  3. DDD不适合小项目,只适合产品或大项目?

大部分人都容易陷入到四层架构和各种DDD对象的概念上出来,以为这些概念用好了就可以了,如果只是研究这些概念,那就完全错了,因为这些框架与概念都只是其表象。

  • DDD是怎么来的?

我没有考证具体DDD的由来,但是我一直给很多人说,DDD其实是面向对象(OOP)的一种落地方式。

  • DDD的建议学习路线?

编辑基础->面向对象->设计模式->领域驱动

  • DDD初学者的两大门槛?
  1. 面向数据驱动转化为面向对象驱动,业务逻辑的控制由数据库的控制转交给对象控制。
  2. 理解面向对象的概念与本质。
  • 开闭原则的理解?

在面向对象编程领域中,开闭原则 (The Open/Closed Principle, OCP) 规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”[1],这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用品质的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。

代码越多越容易出现错误,所以我们要拆分,要聚合。或者说就是提升可维护性、可复用性。

拆分是指,把大段代码拆分成小段代码。其实就是层次划分与对象定义的过程。

你怎么拆分?依据(DDD)

为什么这样拆分?方法(业务聚合)

聚合是指,把相同智能的代码可以不断复用。

  • 软件世界的乌托邦:
  1. 不修改已有代码通过增加新的代码即可实现对功能的调整
  2. 代码可被高效的复用
  3. 增加新的功能只直接测试当前新的功能质量,且不会对之前的功能产生影响。
  4. 非常容易的验证代码质量(单元测试的覆盖度高)
  5. 代码易读性强,层次清晰,规范统一

视频链接:

为什么DDD难落地?_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7安装和部署Jenkins

安装Java环境 检查旧版: rpm -qa | grep java若已经安装了旧版本,则需要先删除,删除方法: rpm -qa nodeps [java package]安装新版: yum install java-11-openjdk yum install java-11-openjdk-devel(开…

07 KVM虚拟机引导固件安装

文章目录 07 KVM虚拟机引导固件安装7.1 概述7.2 安装方法7.2.1 安装edk软件包7.2.2 查询edk软件是否安装成功 07 KVM虚拟机引导固件安装 7.1 概述 针对不同的架构,引导的方式有所差异。x86支持UEFI(Unified Extensible Firmware Interface)…

MySQL示例数据库(MySQL Sample Databases) 之 World数据库

文章目录 MySQL示例数据库(MySQL Sample Databases) 之 World数据库官方示例数据介绍World数据库World 数据库安装world-db/world.sql的脚本内容参考 MySQL示例数据库(MySQL Sample Databases) 之 World数据库 官方示例数据介绍 MySQL 官方提供了多个示例数据库,在…

【致敬未来的攻城狮计划】— 连续打卡第十九天:RA2E1串口通信基础知识

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

什么是GPT模型,GPT下载和国内镜像

什么是GPT模型,GPT模型是通过预训练的方式,采用无监督学习方式,大量语料输入,经过多次训练后得到模型。它能够自动学习并理解自然语言中的语义、句法和语法信息,并可以用于文本生成、对话系统、情感分析、机器翻译等自…

HTTP第二讲——HTTP相关概念

与HTTP 相关的各种应用 1.网络世界 实际的互联网是由许许多多个规模略小的网络连接而成的,这些“小网络”可能是只有几百台电脑的局域网,可能是有几万、几十万 台电脑的广域网,可能是用电缆、光纤构成的固定网络,也可能是用基站、…

SQL之SQL索引

文章目录 一、索引概述介绍演示优缺点 二、索引结构二叉树B-Tree (多路平衡查找树)BTreeHash 三、索引分类四、索引语法五、SQL性能分析SQL执行频率慢查询日志profile详情 索引使用原则验证索引效率最左前缀法则索引列运算字符串不加引号模糊查询or连接的条件数据分布影响 .SQL…

[LeetCode周赛复盘] 第 103 场双周赛20230429

[LeetCode周赛复盘] 第 103 场双周赛20230429 一、本周周赛总结2656. K 个元素的最大和1. 题目描述2. 思路分析3. 代码实现 2657. 找到两个数组的前缀公共数组1. 题目描述2. 思路分析3. 代码实现 2658. 网格图中鱼的最大数目1. 题目描述2. 思路分析3. 代码实现 2659. 将数组清…

二分(整数二分 浮点数二分)

目录 一、整数二分 模板 右边界二分查找(左开右闭) 左边界二分查找(左闭右开) 应用 数的范围 二、浮点数的二分 模板 应用 算术平方根 三、习题 1.数的三次方根 一、整数二分 tip:满足单调性的数组一定可以…

【Linux】进程优先级 + 环境变量

文章目录 📖 前言1. 进程优先级1.1 什么是优先级:1.2 如何修改优先级: 2. 进程的其他概念2.1 竞争性与独立性:2.2 并行与并发:2.3 进程间优先级的体现:2.4 O(1) 调度算法:2.4 进程上下文&#x…

C语言进阶——数据在内存中的存储,你知道吗?

今天我们深度剖析数据在内存中的存储: 重点知识: 1、数据类型详细介绍 2、整形在内存中的存储:原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 之前我们涉及关于这一部分的知识只是大致的进行讲解&#xff0…

网络编程:UDP socket

文章目录 阅读前导 服务端定义日志框架成员属性服务端框架 初始化服务器创建套接字绑定 运行服务端读取数据参数解读 处理数据向客户端发送响应数据关闭文件描述符 客户端定义创建套接字绑定发送数据接收服务器的响应数据关闭文件描述符 测试1本地环回作用 本地测试netstat 指令…

继续科普:ChatGPT 最新写论文使用方法

这两天发现了几个国内就能用的ChatGPT,不需要魔法! 给大家推荐两种方法,大家自行选择: 1、电脑端安装VSCode软件,使用GPT插件: 优点: 无需魔法、无需付费、软件简单易用(稍懂电脑就会用) 缺点: ① 只支持电脑端,不支持手机:软件安装虽简单,但不一定所有人都…

行业常识_RFID

文章目录 1 RF2 RFID2.1 RFID的应用场景2.2 RFID工作原理 1 RF RF,是Radio Frequency的缩写, Radio,n. 收音机;无线电通讯; v. 用无线电通讯(或发送消息) Frequency,n. 频率 RF中文…

electron+vue3全家桶+vite项目搭建【16】electron多窗口,pinia状态无法同步更新问题解决

文章目录 引入实现效果展示问题展示解决方案思路整理1.主进程添加handle2.编写pinia插件3.完善pinia插件4.最终实现效果 引入 pinia是vue3官方支持的全局状态管理工具,简单易用,但是electron的多窗口虽然加载的页面是单个路由,但其实已经是另…

【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制

🎉欢迎来到Labview专栏~四足爬行机器人仿真与控制 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:Labview-3D虚拟平台 文章作者技术和水平有限,如果文中出现错误&#…

【python】keras包:深度学习

Part 0. 环境配置 与 学习数据下载 keras包 与 tensorflow包 WinR ,输入指令: pip install tensorflow pip install keras 推荐镜像:-i https://pypi.tuna.tsinghua.edu.cn/simple/ 关于包 keras包相当于是 tensflow 包的前端 tensflow包…

15 | Qt的自定义信号

1 前提 Qt 5.14.2 2 具体操作 2.1 自定义信号 2.1.1 UI界面设置 2.1.1.1 widget.ui 2.1.1.2 setdialog.ui 2.1.2 headers 2.1.2.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui {class Widget; } QT_END_NAMESP…

105-Linux_Libevent库的安装与使用

文章目录 一.Libevent 概述1.Libevent的特点2.Libevent使用模型3.Libevent 支持的事件类型 二.Libevent的安装三.Libevent简单使用实例 一.Libevent 概述 Libevent 是开源社区的一款高性能的 I/O 框架库&#xff0c;使用 Libevent 的著名案例有&#xff1a;高性能的分布式内存…

操作系统之死锁处理策略

概念 一、什么是死锁 哲学家进程问题中&#xff0c;都在等待另外的哲学家放弃另一只筷子&#xff0c;造成了都不能用餐的现象&#xff0c;互相等待对方的资源 二、死锁、饥饿、死循环区别 三、死锁产生的条件 1、互斥条件 只有对互斥使用的资源的争抢才能导致死锁&#xff0…