DDD领域驱动设计(二)

软件系统复杂性的应对

解决复杂和大规模软件的武器可以粗略的归位三种:抽象 分治和知识

  • 抽象: 使用抽象能够精简问题空间,而且问题越小越容易理解。比如你去一个地方 一开始的时候并不需要确定用什么方式到达。
  • 分治: 类似算法里面的dp用的就是分治的想法。分割后的问题需要足够小,方便一个人解决它。然后考虑如何组合这些分割的小东西。分割的越合理越容易理解,在搭积木的时候更加容易。用业界的话来说就是 <高内聚低耦合>
  • 知识 顾名思义 DDD就是知识中的一种

与微服务架构相得益彰

微服务架构众所周知。不做赘述。我们创建一个微服务时,需要创建一个高内聚 低耦合的微服务。而DDD的限界上下文则完美匹配微服务的特点。这样就能轻松划分出一个微服务。就是DDD的上下界。

在系统复杂之后。我们都需要使用分治来拆解问题。一般有两种方式,技术维度和业务维度。技术维度类似MVC分层设计。一种就是按照业务领域来划分。
微服务架构强调用业务维度来分治应对系统复杂度。而DDD也同样着重业务视角。
在追求目标达到了统一。

我们将架构设计活动精简为以下三个层面:

  • 业务架构----根据业务需求设计业务模块及其关系
  • 架构系统----设计系统和子系统的模块
  • 技术架构----决定采用的技术和框架

以上三种活动在实际开发中是有先后顺序的。但是不一定谁先谁后。在我们解决常规套路问题时,我们很自然往分层架构套(先确定系统架构),或者用PHP开发(确定技术架构) 在业务不复杂的情况下 没啥毛病。
跳过业务架构设计出来的架构关注点不在业务响应上。可能就是个大泥球。在面临需求迭代或者响应市场变化时就会很痛苦。

DDD的核心诉求就是将业务架构映射到系统架构上,在响应业务变化调整业务架构的时候,也能随时调整系统架构。而微服务追求业务层面的复用。设计出来的系统架构和业务一致。在技术架构上则系统模块之间充分解耦。可以自由地选择合适的技术架构,去中心化地治理技术和数据

DDD与微服务关系映射
在这里插入图片描述
用原来的抽奖来做个简单的例子。用DDD重构完成一个中型的基于微服务架构的系统。来做到高内聚低耦合

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

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

相关文章

破局新渠道|2023年热度全域达人分销生态大会回顾

12月7日&#xff0c;由热度电商、热度云、集脉新电商联合举办的「破局新渠道」热度全域达人分销生态大会暨热度云3.0发布会在杭州国际博览中心圆满收官。大会邀请了平台官方、电商协会、品牌方、业务操盘手、数据专家、团长机构、达人等达人分销生态中的多个角色&#xff0c;从…

Python办公—pandas读取Excel表格增加列、两列保持一致、依条件修改单元格内容(附代码)

目录 专栏导读背景插入一列插入多列依条件修改单元格内容(2个条件以内)依条件修改单元格内容(3个条件以上)两列保持一致结尾 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&am…

2023年中国数据智能管理峰会(DAMS上海站2023)-核心PPT资料下载

一、峰会简介 数据已经成为企业的核心竞争力&#xff01;谁掌控数据、更好的利用数据、实现资产化&#xff0c;谁就会真正率先进入大数据时代。 1、数据智能管理趋势和挑战 在峰会上&#xff0c;与会者讨论了数据智能管理的最新趋势和挑战。随着数据量的不断增加&#xff0c…

JNI逆向

IDA&#xff1a;JNI类型转换 1.IDA高版本&#xff08;IDA 高版本内置了定义的JNI结构体; 如果没有的话&#xff0c;在Views->Open subviews -> Type Libraries 中添加Android ARM的lib即可&#xff09; 解决方法: 只需要对JNIEnv 指针&#xff08;JNIEnv * &#xff09…

使用postman时,报错SSL Error: Unable to verify the first certificate

开发中使用postman调用接口&#xff0c;出现以下问题&#xff0c;在确认路径、参数、请求方式均为正确的情况下 解决方法 File - Settings -> SSL certification verification 关闭 找到图中配置&#xff0c;这里默认是打开状态&#xff0c;把它关闭即可&#xff1a;ON …

虾皮测评选品:如何在虾皮平台上进行有效的产品测评和选品

在如今的电商市场中&#xff0c;虾皮&#xff08;Shopee&#xff09;平台已经成为了卖家们最为重要的销售渠道之一。而在虾皮平台上进行产品测评和选品对于卖家来说至关重要&#xff0c;它直接影响到店铺的销售额和利润。本文将为您提供一些关于如何在虾皮平台上进行有效的产品…

如何通过ETLCloud的API对接功能实现各种SaaS平台数据对接

前言 当前使用SaaS系统的企业越来越多&#xff0c;当我们需要对SaaS系统中产生的数据进行分析和对接时就需要与SaaS系统提供的API进行对接&#xff0c;因为SaaS一般是不会提供数据库表给企业&#xff0c;这时就应该使用ETL&#xff08;Extract, Transform, Load&#xff09;的…

复杂 SQL 实现分组分情况分页查询

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、根据 camp_status 字段分为 6 种情况 1.1 SQL语句 1.2 SQL解释 二、分页 SQL 实现 2.1 SQL语句 2.2 根据 camp_type 区分返…

Unity中Shader测试常用的UGUI功能简介

文章目录 前言一、锚点1、锚点快捷修改位置2、使用Anchor Presets快捷修改3、Anchor Presets界面按下 Shift 可以快捷修改锚点和中心点位置4、Anchor Presets界面按下 Alt 可以快捷修改锚点位置、UI对象位置 和 长宽大小 二、Canvas画布1、UGUI中 Transform 变成了 Rect Transf…

Linux 操作系统(查看文件内容)

cat 格式&#xff1a;cat [选项]...[文件]... 说明&#xff1a;把多个文件连接后输出到标准输出&#xff08;屏幕&#xff09;或者加”> 文件名” 输出到另一个文件中 常用选项&#xff1a; -b或—number-noblank: 从1开始对所有非空输出行进行编号 -n或—number: 从1开始所…

网络协议小记

一、TCP/IP协议 作为一个小萌新&#xff0c;当然我无法将tcp/ip协议的大部分江山和盘托出&#xff0c;但是其中很多面试可能问到的知识&#xff0c;我觉得有必要总结一下&#xff01; 首先&#xff0c;在学习tcp/ip协议之前&#xff0c;我们必须搞明白什么是tcp/ip协议。 1、…

架构设计系列之前端架构和后端架构的区别和联系

前端架构和后端架构都是软件系统中最关键的架构层&#xff0c;负责处理不同方面的任务和逻辑&#xff0c;两者之间是存在一些区别和联系的&#xff0c;我会从以下几个方面来阐述&#xff1a; 一、定位和职责 前端架构 主要关注用户界面和用户体验&#xff0c;负责处理用户与…

打造中国人自己的GPTs,百度灵境矩阵升级为智能体平台

12月18日&#xff0c;百度「灵境矩阵」平台全新升级为「文心大模型智能体平台」。灵境矩阵基于文心大模型&#xff0c;为开发者提供多样化的开发方式&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取多样化的开发方式&#xff0c;打造大模型时代的原生应…

关于我对归纳偏置(inductive bias)的概念和应用的详细总结

归纳偏置&#xff08;inductive bias&#xff09; 1.归纳偏置&#xff08;inductive bias&#xff09;的概念2.归纳偏置&#xff08;inductive bias&#xff09;的应用 1.归纳偏置&#xff08;inductive bias&#xff09;的概念 归纳偏置&#xff08;inductive bias&#xff0…

贪吃蛇(二)绘制地图

绘制地图主要是考察基础的循环和分支控制&#xff0c;视频没看完&#xff0c;自己写了一下。 绘制一个基础地图 #include"curses.h" void cursesinit() {initscr();keypad(stdscr,1); }void mapinit() {int row;int col;for(row 0;row < 20;row){if(row 0 || …

如何在 FastAPI 中设置定时任务:完全指南

Web 应用程序开发中&#xff0c;及时高效处理常规任务至关重要&#xff0c;包括定时收集数据或管理任务计划。针对强大且性能卓越的 FastAPI 框架&#xff0c;我们可以通过几种策略来管理这些必要的定时任务。 实现 FastAPI 中的定时任务 本指南将探讨在 FastAPI 环境中管理定…

工业6轴机械臂运动学逆解(解析解)

工业6轴机械臂运动学逆解&#xff08;解析解&#xff09; 通常工业机械臂采用6旋转轴串连的形式&#xff0c;保证了灵活性&#xff0c;但为其运动学逆解&#xff08;即已知机械臂末端的位姿 P P P&#xff0c;求机械臂各个旋转轴的旋转角&#xff09;带来了较大的困难&#xff…

倒计数器:CountDownLatch

CountDownLatch 是 Java 中用于多线程编程的一个同步工具。 它允许一个或多个线程等待其他线程执行完特定操作后再继续执行。 CountDownLatch 通过一个计数器来实现&#xff0c; 该计数器初始化为一个正整数&#xff0c;每当一个线程完成了指定操作&#xff0c;计数器就会减一。…

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现 漏洞名称影响版本影响版本 漏洞复现环境搭建漏洞利用 总结 漏洞名称 影响版本 Apache CouchDB是一个开源的NoSQL数据库&#xff0c;专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式…

【深度学习】序列生成模型(六):评价方法计算实例:计算ROUGE-N得分【理论到程序】

文章目录 一、BLEU-N得分&#xff08;Bilingual Evaluation Understudy&#xff09;二、ROUGE-N得分&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09;1. 定义2. 计算N1N2 3. 程序 给定一个生成序列“The cat sat on the mat”和两个参考序列“The c…