【笔记-软考】软件架构风格

Author:赵志乾
Date:2024-07-18
Declaration:All Right Reserved!!!

1. 概念

        架构风格是描述某一特定应用领域中系统组织方式的惯用模式,其反映了领域中众多系统所共有的结构和语义特性,并能指导如何将各模块、子系统有效组织为一个完整的系统。

2. 数据流架构风格

        数据流架构风格是一种类计算机体系结构,其没有概念上的程序计数器,指令的可执行性与执行仅基于指令输入参数的可用性来确定,故该风格的指令执行顺序是不可预测的,即行为是不确定;主要包括批处理架构风格和管道-过滤器架构风格;

  • 批处理架构风格:每个处理步骤都是一个单独的程序,每一步必须在前一步结束后才能开始,并且数据是完整的,以整体的方式传递;该风格的基本构件是独立的应用程序,连接件是某种类型的媒介;
  • 管道-过滤器架构:将系统分解为几个序贯的处理步骤,并由过滤器(Filter)实现,过滤器之间的数据传输由管道(Pipe)完成;该风格的基本构件是过滤器,连接件是传输管道;

3. 调用/返回风格

        系统中采用调用与返回机制,主要思想是将一个大系统分解为若干子系统,以便降低复杂度,并增加可修改性;主要包括主程序/子程序架构风格、面向对象架构风格、层次型架构风格、客户端/服务器架构风格;

  • 主程序/子程序架构风格:一般采用单线程控制,将问题划分为若干处理步骤,构件即为主程序和子程序;过程调用作为交互机制,充当连接件;
  • 面向对象架构风格:建立在数据抽象和面向对象基础上,数据的表示方法和相应的操作封装在一个抽象数据类型或对象中,该风格的构件是对象;
  • 层次型架构风格:系统分为多层,每层为上层提供服务并作为下层的客户;由于每层至多影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,为软件重用提供了支持;
  • 客户端/服务器风格:基于资源不对等,且为实现共享而提出的架构风格; 

4. 以数据为中心的架构风格

        主要包括仓库架构风格和黑板架构风格;

  • 仓库架构风格:仓库是存储和维护数据的中心场所,在该风格中有两种不同的构件:中央数据仓库和对中央数据进行操作的独立构件;
  • 黑板架构风格:适用于解决复杂的非结构化问题,能在求解过程中综合运用多种不同的知识源,让问题的表达、组织和求解变得比较容易。其为一种问题求解模型,是组织推理步骤、控制状态数据和问题求解的概念跨框架。

5. 虚拟机风格

        人为构建一个运行环境,在该环境上解析并运行自定义语言,从而增加架构的灵活性;该风格主要包括解释器与规则系统两种风格。

  • 解释器架构风格:含有一个虚拟机,用于仿真硬件的执行过程和一些关键应用;
  • 规则系统架构风格:基于规则的系统包括规则集、规则解释器、规则/数据选择器以及工作内存;

注:解释器通常被用于建立虚拟机以弥合程序语义与硬件语义之间的差异,缺点是执行效率低;

6. 独立构件架构风格

        强调系统中每个构件都是相对独立的个体,它们之间不直接通信,以降低耦合度、提升灵活性,该风格主要包括:进程通信架构风格和事件系统架构风格;

  • 进程通信架构风格:构件是独立的过程,连接件是消息传递,其特点为构件通常为命名过程,消息传递方式可以是点到点、异步或同步方式以及远程过程调用等;
  • 事件系统架构风格:基于事件的隐式调用思想,即构件内的过程在一个或多个事件中注册,当一个事件被触发时,系统自动调用在该事件中注册的所有过程;

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

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

相关文章

web前端 Vue 框架面试120题(五)

面试题 81 . 请简述Vue更新数组时触发视图更新的方法? 参考回答: push();pop();shift();unshift();splice();sort();reverse()面试题 82 . 简述如何使用Vue-router实现懒加载的方式…

Vue 给表格单元格加省略号和hover提示

基于antd vue的a-popover封装一下即可 <template><a-popoverv-model"visible"trigger"none"><template #content>{{ text }}</template><divclass"ellipsis"mouseenter"onMouseenter"mouseleave"onM…

鸿蒙Navigation路由能力汇总

基本使用步骤&#xff1a; 1、新增配置文件router_map&#xff1a; 2、在moudle.json5中添加刚才新增的router_map配置&#xff1a; 3、使用方法&#xff1a; 属性汇总&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-compone…

Java线程池ThreadPoolExecutor原理、源码分析

目录 为什么要使用线程池&#xff1f; 线程池执行任务的具体流程是怎样的&#xff1f; 线程池的五种状态是如何流转的&#xff1f; 线程池中的线程是如何关闭的&#xff1f; 线程池为什么一定得是阻塞队列&#xff1f; 线程发生异常&#xff0c;会被移出线程池吗&#xff…

Python爬虫实战 | 爬取携程网景区评论|美食推荐|景点列表数据

本文采用Selenium库爬取携程网的景区评论。 携程接口接入 Selenium介绍 Selenium是一个Web的自动化测试工具&#xff0c;可以按指定的命令自动操作&#xff0c;如让浏览器加载页面、获取数据、页面截屏等。Selenium本身不自带浏览器&#xff0c;需要与第三方浏览器结合才能使…

sklearn基础教程:从入门到精通

文章目录 sklearn基础教程&#xff1a;从入门到精通一、sklearn简介二、安装与配置三、数据预处理数据导入数据清洗特征选择数据标准化与归一化 四、常用模型介绍与应用线性回归逻辑回归决策树支持向量机K近邻算法随机森林集成学习 五、模型评估与调优交叉验证网格搜索模型评估…

基于springboot和mybatis的RealWorld后端项目实战二之实现tag接口

修改pom.xml 新增tag数据表 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for tags -- ---------------------------- DROP TABLE IF EXISTS tags; CREATE TABLE tags (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,PR…

一文认识21世纪商贸物流新格局

在21世纪的全球化浪潮中&#xff0c;商贸物流作为连接生产与消费的重要纽带&#xff0c;其地位日益凸显。随着信息技术的飞速发展&#xff0c;特别是大数据、云计算、物联网等技术的广泛应用&#xff0c;现代物流已远远超越了传统意义上的货物运输与仓储&#xff0c;向着智能化…

前端Canvas入门——用canvas写五子棋?

前言 五子棋的实现其实不难&#xff0c;因为本身就是一个很小的游戏。 至于画线什么的&#xff0c;其实很简单&#xff0c;都是lineTo()&#xff0c;moveTo()就行了。 难的在于——怎么让棋子落入到指定的格子上&#xff0c;怎么判断连子胜利。 当然啦&#xff0c;这部分是…

基于STC8H4K64TL单片机的触摸功能调试

基于STC8H4K64TL单片机的触摸功能调试 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O口STC8H系列单片机I…

关于Codigger之软件项目体检Software Project HealthCheck

为你的软件项目提供快速、可靠的体检 项目体检是Codigger推出的智能代码质量检查工具&#xff0c;可以系统地帮助您交付干净的代码。作为我们Codigger解决方案的重要元素 &#xff0c;代码体检集成到您现有的工作流程中并检测代码中的问题&#xff0c;以帮助您对项目执行持续的…

django中日志模块logging的配置和使用

一、文件的配置 settings.py文件中添加LOGGING块的配置&#xff0c;配置如下 # 日志记录 LOGGING {"version": 1,"disable_existing_loggers": False, # 用于确定在应用新的日志配置时是否禁用之前配置的日志器# 格式器"formatters": {"v…

云监控(华为) | 实训学习day4(10)

SpringBoot增删改的细节研究 一、Spring boot增的安全性 1.开启数据库的事务 SpringBoot中Service层有事务&#xff08;保证操作成功&#xff09; 两个用户操作&#xff0c;同时增加同一条数据&#xff08;用户名&#xff0c;密码一致&#xff09; 验证内容&#xff0c;开启…

MySQL:基础操作(增删查改)

目录 一、库的操作 创建数据库 查看数据库 显示创建语句 修改数据库 删除数据库 备份和恢复 二、表的操作 创建表 查看表结构 修改表 删除表 三、表的增删查改 新增数据 插入否则更新 插入查询的结果 查找数据 为查询结果指定别名 结果去重 where 条件 结…

【Jmeter】记录一次Jmeter实战测试

Jmeter实战 1、需求2、实现2.1、新建线程组2.2、导入参数2.3、新建HTTP请求2.4、添加监听器2.5、结果 1、需求 查询某个接口在高并发场景下的响应时间(loadtime)&#xff0c;需求需要响应在50ms以内&#xff0c;接下来用Jmeter测试一下 Jmeter安装见文章《Jemeter安装教程&am…

极狐GitLab Git LFS(大文件存储)如何管理?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

解决xshell连接不上ubuntu首次安装的虚拟机问题

首次安装完虚拟机&#xff0c;主机和虚拟机之间互ping都没问题&#xff0c;但是xshell登不上去&#xff0c;基本上原因就是虚拟机没有安装ssh服务。 1、关闭防火墙 sudo ufw disable 2、开发22端口 sudo ufw allow 22 3、最后安装ssh sudo apt-get install openssh-serve…

日文医学文献pdf怎么翻译

翻译日文医学文献的PDF可以通过以下几个步骤进行&#xff1a; 1、提取文本&#xff1a; 如果PDF文档是扫描版或者图片格式&#xff0c;可以使用OCR&#xff08;光学字符识别&#xff09;软件提取文本。常用的OCR工具有Adobe Acrobat、ABBYY FineReader等。 如果PDF文档已经是…

多层全连接神经网络(四)---简单的前向网络

神经网络神经元概念部分有需要会单独再讲 激活函数 1. Sigmoid Sigmoid 非线性激活函数的数学表达式是 σ(z) &#xff0c;其图形如图 3.14所示。目前我们知道 Sigmoid 激活函数是将一个实数输入转化到 0~1 之间的输出&#xff0c;具体来说也就是将越大的负数转化到越靠近 0…

C/C++蓝屏整人代码

文章目录 &#x1f4d2;程序效果 &#x1f4d2;具体步骤 1.隐藏任务栏 2.调整cmd窗口大小 3.调整cmd窗口屏幕颜色 4.完整代码 &#x1f4d2;代码详解 &#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&a…