DDD学习笔记

news2025/1/8 0:00:29

1)ddd:
    软件复杂性的应对之道。
    但是不是说:redis这种不会使用。
    开发过程中,一直面临的一种复杂性。

    是一种架构思想: 领域之间的组合。 让开发软件具有搭积木的感觉。

    领域的核心是边界。

    以领域划分为基础。

    以通用语言为建设核心:
        如: 在一个项目中每个模块具有相同的包结构。

2)mvc的做法:
    UserController: 负责用户的注册等。
    OrderController: 创建订单也需要用户信息。

    导致:这2个Controller都引入了UserService。  

3)业务优先: 一个一个模块,一个模块一个文件夹。 // 不看细节,也能看懂大概是干什么的。

4)技术优先: 根本看不懂实体是干什么的。

5)三大设计原则:
    1.单一职责:一个类只负责单一的职责,也就是只有一个引起变化的原因。
    2.开放封闭:对扩展开放,对修改关闭。
    3,依赖反转:值依赖抽象接口,而不依赖于具体实现。

6)DDD模型妙招:
    1.使用充血模型的实体对象,描述核心业务能力。--》对数据库下手。
        系统能做什么事情,一目了然。
    2.使用仓库与工厂,封装实体持久化操作,拜托数据库限制。

7)Martin Flowler:
    贫血模型: pojo ==> 问题: 贫血失忆症,本来定义实体是为了承载业务,我们只能在Service中翻,我们现在不知道用于做什么业务了。

    充血模型: 解决之道:属性 + 引起属性变化的方法写在一起。

8)DDD改造mvc后: // 其实就是: 在3个设计原则下。 
    只有业务逻辑,没有任何实现细节。
    因为面向接口编程了,所有的参数其实都是Entity实体,你也看不出来到底是: mysql还是mongo。
    更加容易做单元测试。 如: 针对AccountReponsitory即可,从Dao换成mapper。 对其他业务没有任何影响。
    领域层不需要任何的依赖。

9)DDD缺点: 带来了类爆炸。

10)聚合:
    将确保这些领域对象在实现共同的业务逻辑时,能保证数据的一致性。

    一个不存在了,其它也不存在了。

    通过聚合根。

11)通过接口去做各种类似的东西。
        如: 微服务、feign、dubbo。

        不是从本地找实现,而是从nacos之类的,从本地查找实现转化为从rpc找实现。

12)MVC: 技术边界清晰,但是业务逻辑边界模糊,很难拆分为: 微服务。
    DDD: 优先设计业务实体,形成业务领域。 通过防腐层和限界上下文实现逻辑边界。 从而很容易调整,如:从本地接口发现改为从rpc发现,
            那么就很容易改为支持微服务的架构。

13)一个注解,从单体架构变为微服务架构。


14)MVC做好后的问题(看起来简单,但是...):
    1.功能扩展性带来负载的重构: 从普通的认证改为 OAuth2鉴权需要重构。
    2.负载问题: GenSIController非常繁忙,SysManageController却很空闲。

    微服务的缺点: 需要部署很多周边服务,非常昂贵,很可能项目上线后不就就撤掉了。
                    因此,我们开始希望是单体。 然后根据发展拆分为微服务。

15)重构对于甲方是没有任何业务价值的。

16)软件核心复杂性的问题: // 也就是DDD出现的原因
    项目迭代过程中,发展出了超出设计之外的问题,这些问题重构又很困难。
        比如: 淘宝开始是php做的,它根本不知道以后还要支持"双11" "秒杀"。

17)DDD的核心:
    1.技术主动理解业务: 我当前的业务需要哪些对象来参与,这些对象构成什么样的业务流程。
    2.打破自己的包结构,向业务调整。
    3."刚刚好"解决问题: DDD强调的是每一步的实现支持当前的业务就行了。

18)Demo架构:
    Client // 向Server发起Http请求。
 
    Interface // 是Dubbo接口定义
    Resource
    Server // 向Resource之间是Dubbo协议交互。 Server做流量的管理。

    Nacos // Server向Nacos注册消费者接口,Resource向Nacos注册生产者接口。

19)初步领域划分:
    HisRequest  // 负责交易日志管理服务
    GsService   // 负责核心的请求转发业务
    SysManage   // 负责客户端管理业务

20)1个注解从单体到微服务
    SPI: ServiceLoader 去加载本地服务的实现。
    否则使用Nacos去从远程加载实现。

21)单体架构到微服务: 让资源的投入更加的精准。

22)DDD中领域暴露出来的,其实还是接口。

23)单体架构快速验证,微服务部署。

24)DDD: 只是一种思想,没有一个类似的框架。

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

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

相关文章

1-3 docker 安装 prometheus

一、环境 1、环境准备 安装Docker 镜像加速 安装 docker 检查版本 安装Docker-compose 二、Docker-compose 安装 Prometheus 1、【方式一】手动创建 docker-compose 和 配置文件 创建prometheus监控的文件夹 创建alertmanager的配置文件 - config.yml 新建grafana的…

YOLOv8 C2f模块融合shuffleAttention注意力机制

1. 引言 1.1YOLOv8直接添加注意力机制 yolov8添加注意力机制是一个非常常见的操作,常见的操作直接将注意力机制添加至YOLOv8的某一层之后,这种改进特别常见。 示例如下: 新版yolov8添加注意力机制(以NAMAttention注意力机制为例…

jsonlite库

jsonlite是一个R语言中用于处理JSON数据的库。它提供了一组简单而强大的函数,用于解析、生成和转换JSON数据。 使用jsonlite库,您可以轻松地将JSON数据解析为R语言中的数据结构,如列表或数据框。您还可以将R语言中的数据结构转换为JSON格式&…

解决vue3父组件执行子组件方法报错:TypeError: Cannot read properties of null

现象: 父组件执行子组件的代码: 原因: Vue3使用的所有变量除了来自父组件传值的props以外,其他的html绑定的所有本地变量都必须通过return导出! 这一点是vue3 最坑爹的一点。很容易忘记。 解决办法:使用t…

世界500强通信巨头全面推进SDLC,打造高质量的数字解决方案

某通信巨头是世界500强企业,全球领先的信息与通信技术解决方案供应商。多年来,该公司在数字化领域一直走在前列,打造了大量数字化创新解决方案和成功案例,助力合作伙伴更好地理解和应用数字化技术,实现自身的发展和价值…

c语言 简单认识 指针和结构体

指针 代码 #include <stdio.h>int main(){int a 10;//指针类型需要与变量的类型相同&#xff0c;且后面需要添加一个*符号&#xff08;注意这里不是乘法运算&#xff09;表示是对于类型的指针int * p &a; //这里的&并不是进行按位与运算&#xff0c;而是取…

Kubernetes 的四个网络挑战

Kubernetes 的主要职责之一是在应用程序之间共享节点。由于这些应用程序需要相互通信并与外部世界通信&#xff0c;因此网络是一个基本的需求。 Kubernetes 托管的分布式应用程序架构 来自 Kubernetes 集群外部的请求通常通过负责将它们代理到适当服务的路由器或 API 网关进行…

mac安装python3

文章目录 1. 安装1.1 brew安装&#xff08;失败&#xff09;2. 下载安装包 2. 查看版本3. 配置 1. 安装 1.1 brew安装&#xff08;失败&#xff09; brew install python3下载完成后报错&#xff1a;Error: python3.10: unknown or unsupported macOS version: :dunno 解决&a…

边缘计算助力低速无人驾驶驶入多场景落地快车道

自动驾驶刮起的风&#xff0c;如今正吹向低速无人驾驶赛道。近期不完全统计显示&#xff0c;当前A股及港股正在排队IPO的自动驾驶相关企业共有12家&#xff0c;其中实现盈利的企业仅两家&#xff0c;而且实现盈利的两家企业最主要的收入并不完全源于自动驾驶领域。 相比之下&am…

微信小程序webview中嵌套uniapp时的文件下载问题

文章目录 背景解决方案一、思路二、引入依赖三、H5端代码四、微信小程序端代码 效果图参考 前往闪闪の小窝以获得更好的阅读和评论体验 背景 这个标题就已经够抽象了吧 本来用微信小程序的web-view去嵌套h5已经因为微信的种种限制&#xff08;微信不希望你把微信小程序当做一…

五、计算机网络

&#xff08;一&#xff09;OSI/RM 七层模型 七层模型是计算机网络的基石&#xff0c;整个计算机网络是构建与七层模型之上的。 在数据链路层&#xff0c;数据开始以帧为单位&#xff0c;网卡的 MAC 地址就是数据帧的地址&#xff0c;数据的传输开始有地址了。 局域网是工作…

3.JMeter高级使用-让你与众不同

概述 今日目标&#xff1a; 插件下载与安装Basic Graphs 主要点 Average Response Time 平均响应时间Active Threads 活动线程数Successful/Failed Transactions 成功/失败 事务数 Additional Graphs 主要点 Response Codes 响应码Bytes Throughput 吞吐量Connect Times 连接…

【C++】类与对象 第三篇(初始化列表,explicit,static,友元,内部类)

再谈构造函数 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数给对象各个成员变量一个合适的初始值 class Date{public:Date(int year, int month, int day){_year year;_month month;_day day;}​private:int _year;int _month;int _day;}; 虽然上述…

成语猜猜猜小程序源码系统 自带流量主功能帮你赚钱,带完整搭建教程

今天来给大家介绍一款成语猜猜猜小程序源码系统 。随着小程序生态的日益繁荣&#xff0c;越来越多的人开始关注小程序的开发和运营。成语猜猜猜作为一种具有趣味性和知识性的游戏形式&#xff0c;在小程序领域中备受欢迎。因此&#xff0c;开发一个成语猜猜猜小程序源码系统&am…

轻松理解 Transformers (3): Feed-Forward Layer部分

编者按&#xff1a;随着人工智能技术的不断发展Transformer架构已经成为了当今最为热门的话题之一。前馈层作为Transformer架构中的重要组成部分&#xff0c;其作用和特点备受关注。本文通过浅显易懂的语言和生活中的例子&#xff0c;帮助读者逐步理解Transformers中的前馈层。…

信息科技风险管理:合规管理、技术防控与数字化

信息科技对金融业务发展所起的作用是举足轻重的。近年来&#xff0c;金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员&#xff0c;我们笃信信息科技是一个非常有用的工具&#xff0c;一个兼具产品思维和管理思维、拥有高质增效能力的工具。 这个工…

C语言 每日一题 PTA 11.6 day10

1.调和平均 N 个正数的算数平均是这些数的和除以 N&#xff0c;它们的调和平均是它们倒数的算数平均的倒数。 本题就请你计算给定的一系列正数的调和平均值。 输入格式&#xff1a; 每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N(≤1000)&#xff1b;第 2 行给…

c语言 结构体 简单实例

结构体 简单例子 要求&#xff1a; 结构体保存学生信息操作 代码 #include <stdio.h>//定义结构体 struct student{int ID;char name[20];char sex;char birthday[8];int grade; };int main(){int number;printf("请输入学生个数&#xff1a;");scanf(&quo…

SpringBoot内容协商(简单使用、源码解读、默认Converters、自定义Converters)

目录 1. 内容协商1.1 简单使用1.2 源码解读1.3 WebMvcAutoConfiguration提供几种默认HttpMessageConverters1.4 自定义HttpMessageConverter支持yaml格式输出 1. 内容协商 1.1 简单使用 一套系统适配多端数据返回 基于请求头内容协商&#xff1a;&#xff08;默认开启&#x…

学习笔记|秩相关分析|Spearman相关分析|Kendall相关分析|规范表达|《小白爱上SPSS》课程:SPSS第十九讲:秩相关分析怎么做?

目录 学习目的软件版本原始文档秩相关分析一、实战案例二、统计策略三、SPSS操作四、结果解读五、规范表达1、规范图表2、规范文字 六、划重点&#xff1a; 学习目的 SPSS第十九讲&#xff1a;秩相关分析怎么做&#xff1f; 软件版本 IBM SPSS Statistics 26。 原始文档 《…