DDD、SOA、微服务和微内核

news2024/9/24 17:16:39

DDD、SOA、微服务和微内核,看到经常有人把这几个概念拿出来一起讲。事实上,DDD和其他三个不是一个维度的东西。

DDD其实特别好理解,DDD就是领域来驱动设计嘛,是一种设计思想。很容易又和OOA、OOD和OOP来比较了。这个回头再说。

SOA、微服务和微内核都是架构风格,DDD里能和他们三个放在一起比较的是四层架构和六边形架构。

四层架构

四层架构长这样:

4a8a4fa13b7a30de50bd8c1c6c77335f.png

分为用户接口层、应用层、领域层和基础层,四层架构目的是为了解耦,下层不依赖上层,从依赖关系上讲,四层架构的箭头是反过来的。

目前这个架构,在现代系统中,通常用作项目工程模块的设计。就是说更传统的MVC逐渐被淘汰,目前主流就是这种四层架构。有的项目工程会先用限界上下文划分子域,再用四层架构。然后代码结构长这样:

├─interfaces   API接口层
│   ├─dto     视图模型,数据模型定义 vo/dto(大多数情況是一样的)
│   └─controller   控制器,对外提供(Restful)接口
│ 
├─application   应用层
│   ├─service  应用服务,非核心服务 
│   └─***      others
│ 
├─domain   领域层
│   ├─entity        领域实体、聚合根,充血的领域模型 
│   ├─valueobject        领域值对象       
│   └─service  领域服务类,一些不能归属某个具体领域模型的行为
│ 
├─infrastructure  基础设施层
│   ├─po           持久化对象 
│   ├─repository 仓储类,持久化接口&实现,可与ORM映射框架结合
│   ├─dao         数据访问对象 
│   ├─client       feign等调用客户端 
└─  └─factory    工厂类,负责复杂领域对象创建,封装细节

底层实体采用充血模型,有一些聚合,形成聚合根。与存储层的交互封装在仓库中,用DDD工厂来管理仓库。上层会将实体转换成贫血模型再暴露出去。你们项目的结构,架构师是不是这样定义的?

六边形架构

六边形架构很多文章作者把这个架构分成几层,这些都是加上了作者个人的理解。实际上六边形架构又叫洋葱形架构很简单,就是个端口适配器模式。外六边形是技术域,内六边形是业务域。这个常用于一些整体架构中。比如说基于一些基础组件做二次开发。真正的业务实现是组件实现的,有一些专门的维护人员。但是团队中往往会有更多成员在做封装接口暴露给公司内的用户,做高可用或者自动化运维这些通常所说的外层。这个外层就是六边形架构里技术域解决的问题。

8339559a04f7d61ab061f54ac8991ea7.png

SOA和微服务架构

SOA的出现是为了解决功能复用的问题,将一些共通的模块提取出来做成服务。这个我之前在开发中发现不好用,仅次于单体应用时各个模块引入一个common的jar包。因为这些共通的模块很可能适应不了各方面的需求,上层的需求总有一些差异。这样的情况下,这个共通模块就不太好维护了。

服务化的概念使得上世纪就已经产生的DDD得到了大家的关注。因为DDD解决了怎么服务化的问题,就是划分领域。微服务就是服务化之后划分粒度的问题了。

微内核架构

微内核架构又叫插件化架构,包含两类组件:核心系统(core system)和插件模块(plug-in modules)。核心系统负责和业务无关的通用功能,例如模块加载、模块间通信等;插件模块负责实现具体的业务逻辑,例如“学生信息管理”系统中的“手机号注册”功能。

核心系统(Core System)功能一般比较稳定,不会由于业务扩展而不断修改,插件模块需要根据业务功能的发展不断地扩展。微内核的架构本质是将变化部分封装在插件里,从而实现快速灵活扩展的目标,而同时又不影响整体系统的稳定。常见的例子有:Eclipse IDE、Spring、Dubbo。

我做过一个配置化项目。把业务流程划分成模块,会不断有新业务接入进来,很多模块都可以复用。比如业务A需要a\b\c三个模块,业务B需要a\c\d\e四个模块,那新业务进来只需要进行模块流程的配置。如果需要的模块没有,那就以插件的形式集成进来再进行配置。我们称这个服务采用的是微内核架构,目的就是要让大家把新功能的开发做插件式开发,避免对旧功能的影响,提高系统的稳定性。

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

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

相关文章

世微 AP9166 DC-DC降压IC 18V 2A同步降压转换器

600KHz,18V,2A同步降压转换器 概述 AP9166是一款完全集成的效率2A同步整流降压转换器。AP9166运行在宽输出电流上以高效率 负载范围。此设备提供两个操作模式、PWM控制和PFM模式切换控制,允许更宽范围的高效率 负载AP9166至少需要现成标准的…

JVM的内存分区以及垃圾收集

1.JVM的内存分区 1.1方法区 方法区(永久代)主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的。 1.2虚拟机栈 虚拟机栈也就是我们平时说的栈内存,它是为java方法服务的。每个方法在执行的…

mysql踩坑

关于安装 1报错:ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client具体代码如下: import mysql from "mysql"//连接数据库 const dbmysql.createPool({h…

计算机视觉技术在智慧城市建设中的应用

计算机视觉技术在智慧城市建设中的应用 随着城市化进程的不断推进,更多的人们选择在城市生活、工作和娱乐。面对快速增长的人口和日益复杂的城市环境,很多城市开始探索智慧城市的建设。智慧城市的核心就是将现代信息技术应用于城市管理中,以…

gitlab下载,离线安装

目录 1.下载 2.安装 3.配置 4.启动 5.登录 参考: 1.下载 根据服务器操作系统版本,下载对应的RPM包。 gitlab官网: The DevSecOps Platform | GitLab rpm包官网下载地址: gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像地…

阿里云人工智能平台PAI多篇论文入选EMNLP 2023

近期,阿里云人工智能平台PAI主导的多篇论文在EMNLP2023上入选。EMNLP是人工智能自然语言处理领域的顶级国际会议,聚焦于自然语言处理技术在各个应用场景的学术研究,尤其重视自然语言处理的实证研究。该会议曾推动了预训练语言模型、文本挖掘、…

vue中element-ui日期选择组件el-date-picker 清空所选时间,会将model绑定的值设置为null 问题 及 限制起止日期范围

一、问题 在Vue中使用Element UI的日期选择组件 <el-date-picker>&#xff0c;当你清空所选时间时&#xff0c;组件会将绑定的 v-model 值设置为 null。这是日期选择器的预设行为&#xff0c;它将清空所选日期后将其视为 null。但有时后端不允许日期传空。 因此&#xff…

Java 线程运行方法和原理

线程运行 原理 栈与栈帧&#xff1a; Java 虚拟机栈会为每个启动的线程分配一块栈内存&#xff0c;其中存储着栈帧&#xff08;Frame&#xff09; 每个栈由多个栈帧组成&#xff0c;栈帧对应调用方法&#xff08;函数&#xff09;所占用的内存每个栈只有一个活动栈&#xf…

羊大师解读,血压波动

羊大师解读&#xff0c;血压波动 血压是身体健康的一个重要指标&#xff0c;但有时候我们会发现血压存在着波动的情况。血压波动的原因有很多&#xff0c;包括生活方式、遗传因素、药物影响等等。本文小编羊大师将为大家详细介绍血压波动的原因&#xff0c;以及预防和管理血压…

无脑利用API实现文心一言AI对话功能?(附代码)

前言&#xff1a;在当今数字化的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正在不断演进&#xff0c;为开发者提供了丰富的工具和资源。其中&#xff0c;API&#xff08;应用程序接口&#xff09;成为构建强大AI应用的关键组成部分之一。本文将介绍如何利用API来…

git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

GIT | 分支 文章目录 GIT | 分支创建分支合并分支删除分支合并冲突分支管理策略bug分支强制删除分支 创建分支 查看当前本地仓库中有哪些分支 git branchHEAD所指向的分支就是当前正在工作的分支 cat .git/HEAD创建一个分支 git branch dev创建好了&#xff0c;但是目前还是…

计算机组成原理—中央处理器CPU

文章目录 CPU的功能与架构CPU的组成运算器控制器 指令执行过程指令流程指令执行方案 数据通路单总线结构专用通路结构 硬布线控制器设计硬布线执行流程硬布线CU内部怎么设计微操作的组合电路 总结 微程序控制器设计微程序的基本理念微程序的基本结构 微指令设计微程序CU设计 指…

使用代理IP时的并发请求是什么意思?

很多做过数据采集的技术们应该都有所了解&#xff0c;在选择代理IP时会有一个并发请求的参数&#xff0c;这个参数是什么意思呢&#xff1f;可能有很多新手不是很了解&#xff0c;其实代理IP的并发请求就是指同时发送多个请求到目标服务器&#xff0c;以提高请求的效率和速度。…

嵌入式系统挑战赛题目---递归方法实现字符串反转函数

一、题目要求 递归函数是一种在函数内容调用自身的函数。它通过将复杂的问题分解成更小的子问题来解决。递归函数通常包含两部分&#xff1a;基本情况和递归调用。请使用递归方法实现字符串反转的C语言函数。 请根据要求在begin、end间完成代码&#xff0c;不要改变代码中其他…

开具实习证明:在线实习项目介绍

大数据在线实习项目&#xff0c;是在线上为学生提供实习经验的项目。我们希望能够帮助想要在毕业后从事数据科学类工作的学生更加顺利地适应从教室到职场的转换&#xff1b;也帮助那些在工作中需要处理数据、实现数据价值的其他职能的从业者高效快速地掌握每天都能用起来的数据…

3、Kafka 线上集群部署方案怎么做?

文章目录 1、操作系统的选择1.1、I/O 模型的使用1.2、数据网络传输效率1.3、社区支持度 2、磁盘的选择3、磁盘容量的规划3.1、举例思考本问题&#xff1a;3.2、计算一下&#xff1a;3.3、规划磁盘容量时你需要考虑下面这几个元素&#xff1a; 4、带宽规划4.1、计算 总结 1、操作…

CSS基础面试题

介绍一下标准css盒子模型与低版本IE的盒子模型&#xff1f; 标准盒子模型&#xff1a;宽度内容的宽度&#xff08;content&#xff09; border padding margin 低版本IE盒子模型&#xff1a;宽度内容宽度&#xff08;contentborderpadding&#xff09; margin box-sizing 属性…

Java架构师-数据机构与算法实战(第一篇)

数学知识回顾 指数 指数函数是重要的基本初等函数之一。一般地&#xff0c;ya^x函数(a为常数且以a>0&#xff0c;a≠1)叫做指数函数&#xff0c;函数的定义域是 R 。注意&#xff0c;在指数函数的定义表达式中&#xff0c;在a^x前的系数必须是数1&#xff0c;自变量x必须在…

网易市值超过美团成为中国市值第四大互联网公司 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 网易市值超过美团成为中国市值第四大互联网公司 百度文心一言插件商城正式上…

SQL数列

SQL数列 1、数列概述2、SQL数列2.1、简单递增序列2.2、等差数列2.3、等比数列3、SQL数列的应用3.1、连续问题3.2、多维分析1、数列概述 数列是最常见的数据形式之一,实际数据开发场景中遇到的基本都是有限数列。常见的数列例如:简单递增序列、等差数列、等比数列等 SQL如何实…