【软考】系统架构设计风格分类的个人理解

个人适当学习了软考系统架构设计师中关于系统架构设计相关的内容,梳理了一下相关信息。

常见架构类型和常见分类

常见的软考中出现的系统架构列举如下:

  • 分层架构
  • 管道-过滤器架构
  • 客户端-服务器架构
  • 模型-视图-控制器架构,即MVC架构
  • 事件驱动架构
  • 微服务架构
  • 黑板架构
  • 解释器模式
  • 数据仓库风格架构
  • 面向服务架构

网上查找到的资料一般把架构分为五类架构风格,分别是数据流风格,调用返回风格,独立构建风格,虚拟机风格和仓库风格。并对上述系统进行了归类,归类到这五种架构风格中。

在这里插入图片描述

架构分类之个人理解

以下纯属个人角度的理解,和软考本身的考点和预期可能不相符合,请注意甄别。

针对上述分类个人认为,感觉有在把不同维度或者层次的内容强行放在同一层次来进行比较的嫌疑,个人感觉非常别扭,所以我重新按照个人的理解进行了分类。同时也参考了上述的五类架构风格的分类。

上述分类个人感觉是在把不同层次的系统混为一谈,比如说"分层架构",可以是服务器程序,也可以是客户端程序中的一种实践方式,但是客户端-服务器架构,则是在描述一个典型的网络结构模式,当然这也可以是一种广义上的系统架构,但是因为需要从系统架构的角度去分类,混为一谈就会显得很混乱,所以我觉得最重要的是理清楚系统的层次的概念。

个人按照两层一类来对上述架构风格进行划分。

第一层,整体系统 还是 单体系统

第一层是当前描述的系统是否存在和外界的交互,不存在交互则是一个逻辑自洽的整体系统,而存在交互则认为这个系统是一个和外界存在交互的单体系统。

从这个层面来说,客户端-服务器架构个人认为描述的是一个整体系统,事件驱动架构个人认为也是一个整体系统,这里可能会存在疑问,事件驱动往小了说是一种编程框架,往大了说则决定了系统的运行机制,我理解事件驱动架构的核心是决定了包括客户端和服务器在内的整个系统的信息交互方式,也就是客户端和服务器不直接交互,而是通过这个事件驱动框架进行交互,这就是事件驱动架构。

而上述其他的架构,个人认为都是在描述单体系统。

第二类,请求响应系统 还是 输入输出系统

第二类是对单体和外界交互的方式进行分类。我们这里把单体系统都视作服务端(比如手机APP也可以视作服务端,客户端就是我们用户,或者是其他调用这个app的APP)根据客户端在发起请求后,和服务端的输出产物之间的关系,可以分为请求返回响应系统和输入输出系统。

请求返回响应系统中,客户端需要获取系统返回的结果,个人理解为输出结果和输入来源是同一媒介或者说界面,比如都是通过网络链路接收请求和返还结果,或者手机app界面上触发的修改,最终将修改结果呈现在手机app界面上。个人认为上述的分层架构,MVC架构,微服务架构,黑板架构,数据仓库风格架构,面向服务架构都是属于这一类的。

而输入输出系统中,客户端不需要获取到系统返回的结果,客户端只是输入系统,而输出是在其他界面,或者说是其他介质上。比如管道-过滤器系统的典型应用,编译器,输入为源文件,输出产物为可执行文件。或者闭环控制架构,其输入为设定的温度,和从温度传感器接收到的当前温度,但输出是对制冷的化学过程的执行强度的控制。包括上述虚拟机风格中的解释器模式,个人认为也可以归为此类。输入为代码或者字节码,输出为操作系统的执行目标,也就是一个接近流式的处理流程。

第三层,物理上可拆分单体 还是 物理上不可拆分单体

第三层个人认为是单体系统内部是否可拆分为不同的单体。当然分层架构,内部也可以认为是有很多个不同的模块组成的,但其在物理结构上,本质上还是一个物理上不可拆分的单体,只是在逻辑上是可拆分的。

分层架构,数据仓库风格架构,黑板架构个人认为都是物理上不可拆分的单体架构。而模型-视图-控制的MVC架构,个人认为就是分层架构在WEB应用场景下的一种特例。

面向服务架构个人认为就是一种典型的物理上可拆分的单体架构,即内部可以进一步拆成物理上不同的系统,这里应该是特指物理上可拆分的请求响应系统。而微服务架构可以认为是面向服务架构的一种特例,系统架构设计时以细粒度地解耦地拆分服务为要务的一种设计方式。

个人分类Xmind

在这里插入图片描述

具体架构的简要说明

架构的组成成分

每一种架构都有各自不同的组成构件。以下列举下几种常见架构的组成构件。

  • 分层架构(四层为例:展现层,业务层,持久层,数据层)

  • 管道-过滤器架构(过滤器类型:过程起点,数据转换,测试条件,终点)

  • MVC架构(模型,视图,控制器)

  • 黑板架构(黑板,知识源,控制组件)

架构的评估维度

每种架构都可以从 使用场景类型,优点,缺点,实际用途各个维度进行理解和评估。这个待后续补充。

参考文档

https://zhuanlan.zhihu.com/p/603201577
https://zhuanlan.zhihu.com/p/564143827

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

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

相关文章

行为树(BEHAVIOR TREES)及其工业应用

顾名思义,行为树是描述事物(人,动物,机器人,虚拟角色等等)行为的树形结构。游戏行业使用行为树为角色行为建模。现在行为树建模技术正在向其它领域渗透,比如工业产线编排,机器人控制…

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

目录 前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结: 前言: C的学习难度大,内容繁多。因此我们要及时掌握C的各种特性,因此我们更新本篇文章,向…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存,那么既然引入缓存,那就会有一个缓存与数据库数据一致性的问题。 首先,我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式,是最常见的Redis缓存模式&a…

【状态估计】基于卡尔曼滤波器和扩展卡尔曼滤波器用于 INS/GNSS 导航、目标跟踪和地形参考导航研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【深入探究人工智能】:历史、应用、技术与未来

深入探究人工智能 前言人工智能的历史人工智能的应用人工智能的技术人工智能的未来当代的人工智能产物结语🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 &am…

LangChain大型语言模型(LLM)应用开发(三):Chains

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

【UE4 塔防游戏系列】10-防御塔升级

目录 效果 步骤 一、根据防御塔等级修改子弹伤害 二、根据防御塔等级修改子弹速度 三、根据防御塔等级修改检测半径 四、根据防御塔等级修改子弹颜色 五、根据防御塔等级修改换弹时间 效果 步骤 一、根据防御塔等级修改子弹伤害 1. 打开“TowerBaseBullet_Child”&…

【ArcGIS Pro二次开发】(48):三调土地利用现状分类面积汇总统计

之前做了一个三调三大类面积统计,有小伙伴反映太粗糙,想要一个完整的地类面积汇总表。 【ArcGIS Pro二次开发】(35):三调三大类面积统计 本质上并没有多少难度,之前也做过类似的用地用海汇总表,于是拿出来改一改就好了…

window 命令笔记

1.查看端口 输入“netstat -ano”并回车可以获得所有网络连接活动的列表,在表中,本地地址IP地址后方冒号之后的即是端口号: 如果想要查找特定的端口可以输入命令“netstat -aon|findstr “端口号””,例如“netstat -aon|findstr…

My_window类(带有next和quit按钮)

运行代码: //My_window类(带有next和quit按钮) #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"//--…

C++基础算法离散化及区间合并篇

📟作者主页:慢热的陕西人 🌴专栏链接:C算法 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要讲解了双指针,位运算,离散化以及区间合并。…

有效的括号(C)

bool isValid(char* s) {ST st;StackInit(&st);while (*s) //遍历 -- 与\0终止{//是左括号 压栈if (*s ( || *s [ *s {){StackPush(&st, *s);s;}else{//应对样例: ’]if (StackEmpty(&st)){StackDestroy(&st);return false;}//不是左括号 应该就…

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树、Pipeline、交叉验证

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树案例 除了scikit-learn外,在spark中也提供了机器学习库,即Spark MLlib。 在Spark MLlib机器学习库提供两套算法实现的API:基于RDD API和基于DataFrame API。今天,主要介绍下Data…

docker k8s

Docker docker到底与一般的虚拟机有什么不同呢? 我们知道一般的linux系统即GNU/Linux系统包括两个部分,linux系统内核GNU提供的大量自由软件,而centos就是众多GNU/Linux系统中的一个。 虚拟机会在宿主机上虚拟出一个完整的操作系统与宿主机完…

在 3ds Max 中对链模型进行摆放姿势处理

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 建模和“摆姿势”3D链可能看起来是一项繁琐的工作,但实际上可以通过使用阵列工具并将链中的链接视为骨骼来轻松完成。在本教程中,我将向您展示如何对链条进行建模,并通过…

oled拼接屏在柳州的户外广告中有哪些应用展现?

柳州oled拼接屏是一种高端的显示屏,它采用了OLED技术,具有高亮度、高对比度、高色彩饱和度、高刷新率等优点,能够呈现出更加真实、清晰、细腻的图像效果。 同时,柳州oled拼接屏还具有拼接功能,可以将多个屏幕拼接在一…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

GUI-Menu菜单实例

运行代码&#xff1a; //GUI-Menu菜单实例 #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"struct Lines_window :Window {Lines_window…

常见的网络攻击

​ 1.僵木蠕毒 攻击业内习惯把僵尸网络、木马、蠕虫、感染型病毒合称为僵木蠕毒。从攻击路径来看&#xff0c;蠕虫和感染型病毒通过自身的能力进行主动传播&#xff0c;木马则需要渠道来进行投放&#xff0c;而由后门木马&#xff08;部分具备蠕虫或感染传播能力&#xff09;构…

Mybatis架构简介

文章目录 1.整体架构图2. 基础支撑层2.1 类型转换模块2.2 日志模块2.3 反射工具模块2.4 Binding 模块2.5 数据源模块2.6缓存模块2.7 解析器模块2.8 事务管理模块3. 核心处理层3.1 配置解析3.2 SQL 解析与 scripting 模块3.3 SQL 执行3.4 插件4. 接口层1.整体架构图 MyBatis 分…