软件设计风格(干货)-架构师之路(九)

news2024/11/15 19:40:22

一、软件架构风格概念

Architecture架构,体系结构

软件体系结构风格是 描述某一特定应用领域中 系统组织方式 的惯用模式。架构风格定义一个系统家族,即 一个架构的定义、一个词汇表和一组约束。词汇表包含 一些构建和连接类型,而一组约束 指出系统是如何将这些构件和连接件组合起来的

架构风格 反映了领域中众多系统所共有的结构和语义特性,并指导 如何将各个模块和子系统有效组织成一个完整的系统

架构设计核心问题,能否达到架构级别的软件复用。

架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。

二、软件架构风格(五大类)

  1. 数据流风格

面向数据流,按照一定顺序从前到后执行程序,代表风格 批处理序列、管道-过滤器。

A.批处理序列:

构件为一系列固定计算单元,构件之间 只通过数据传递交互。每一步程序都必须在其前一步结束才能开始,数据传递下去。

B.管道-过滤器:

过滤器是构件,连接件是管道,前一个构件的输出作为后一个构件的输入。

(批处理序列和管道-过滤器的区别,批处理看视频必需全部下载完,管道可以边看边下载,一步一步处理)

区别是批处理必需前一个处理完才可以执行下一个,管道-过滤则是前面处理到部分,就可以执行下一个。

  1. 调用/返回风格

构建之间 存在调用关系,一般显式调用,代表的风格 主程序/子程序、面向对象、层次结构。

  1. 主程序\子程序:

单线程控制,把问题划分为若干个处理步骤。

  1. 面向对象:

构件是对象,连接件是对象件交互方式,对象通过调用函数和过程。

  1. 层次结构:

构件组成层次结构,连接件决定层如何交互协议来定义。修改某一层,最多影响相邻的两层(通常只影响上一层)。

层次的优点:

越底层,抽象程度越高。

为软件复用提供强大支持。

缺点:

分层不容易,难道到正确的层次抽象方法。

  1. 独立构件风格

构件独立,之间不存在显式关系,通过 某个事件触发、异步的方式来执行,代表的风格由 进程通信、事件驱动系统(隐式调用)。

  1. 进程通信

构件是独立的进程,连接件是传递消息。构件是命名过程,消息传递可以 点对点、异步或同步、以及远程调用等。

  1. 事件驱动系统(隐式调用)

构件不直接调用过程,而是触发或广播一个或多个事件。(隐式调用比如spring的applicationEvent和kafka消费)

优点:

软件复用、系统维护。

缺点:

构件放弃了对系统计算的控制。(被他人被动调用,所以不能主动控制)

  1. 虚拟机风格

自定义一套规则供使用者使用,使用者基于这个规则来使用,能够跨平台适配,代表风格由 解释器、基于规则的系统。

典型的虚拟机jvm

  1. 解释器

包含解释引擎,包含解释代码的存储器,包含解释引擎工作状态数据结构存储,以及记录源代码被解释进度。缺点效率低。

  1. 基于规则的系统

包含 规则集、规则解释器、规则/数据选择器和工作内存,一般在人工智能和DSS中。

(DSS决策知识,比如大数据进行分析)

  1. 仓库风格

以 数据为中心,所有的操作系统都是围绕建立数据库中心进行的,代表风格 数据库系统、超文本系统和黑板系统。

  1. 数据库系统

两大类,一类是中央共享数据源,保存数据状态。另一类多个独立处理单元,处理单元对数据元素进行操作

  1. 超文本系统

互联网领域,网状结构。

  1. 黑板系统

包含 知识源、黑板和控制。

知识源则是包含若干提供计算的单元。黑板是全局数据库。知识源通过响应黑板的变化来变化。

三、其他风格

除了上面的五大风格外,还有其他风格。

  1. 闭环控制

适用嵌入式系统,当软件操作一个物理系统时,软件与硬件之间可以粗略的表示一个反馈循环,反馈循环接受一定输入,来确定输出,使环境达到新状态。(比如空调从26变为23摄氏度,车子自动巡航)

  1. C2体系风格

通过连接件绑定在一起的按照一组规则运作的并行架构风格。规则如下

构件连接件都有一个顶部和底部,构件与构件不允许直接连接,构件的底部必需连接连接件的顶部。

一个连接件可以和任意数目的其他构件和连接件链接。

真题:

软件架构风格是描述特定应该用领域中系统组织方式的()。系统风格反映领域中众多系统所共有的结构和(),强调对架构()的重用。

答案:

惯用模式   语义分析   设计

()架构风格可以概括为通过连接件绑定在一起,按照一组规则运作的构件。

答案是C2

不是规则系统,规则系统是会根据参数变化的。

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

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

相关文章

监控 FTP 服务器

文件传输协议 (FTP) 用于在 TCP/IP 网络中的服务器和客户端之间传输文件,它是一种标准协议,广泛用于在各个垂直行业的组织之间从集中位置存储和分发数据。FTP协议的其他一些安全版本如下: SSH 文件传输协议 &#xff…

SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理 今日内容 SpringBootWeb入门 前言 我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族…

中国CV军团,危矣?!

大数据产业创新服务媒体 ——聚焦数据 改变商业 近期,云从科技发布了2023年半年报。应该说,云从科技交出的成绩单很不好。事实上,商汤、旷视等CV厂商的情况也好不到哪去。云从科技的处境有一定的代表性,因此,我们将通…

Python“牵手”拼多多商品评论数据采集方法,拼多多API申请步骤说明

拼多多平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,拼多多API接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问拼多多平台的数据,包括商品信息、店铺信息、物流信息,评论数据等&a…

国内常见的几款可视化Web组态软件

组态软件是一种用于控制和监控各种设备的软件,也是指在自动控制系统监控层一级的软件平台和开发环境。这类软件实际上也是一种通过灵活的组态方式,为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。通常用于工业控制,自动…

机器学习分类,损失函数中为什么要用Log,机器学习的应用

目录 损失函数中为什么要用Log 为什么对数可以将乘法转化为加法? 机器学习(Machine Learning) 机器学习的分类 监督学习 无监督学习 强化学习 机器学习的应用 应用举例:猫狗分类 1. 现实问题抽象为数学问题 2. 数据准备…

Electron 报gpu_process_host.cc(951)] GPU process launch faile错误

解决方法,在入口js文件中,添加如下代码: app.commandLine.appendSwitch(no-sandbox)

Vulhub之Shiro篇

CVE-2010-3863--认证绕过 1、启动靶机 在终端里进入事先进入准备好的vulhub靶场目录下 cd /vulhub-master/shiro/CVE-2010-3863 sudo docker-compose up -d 2、直接请求管理页面/admin,无法访问,将会被重定向到登录页面 3、构造恶意请求/./admin&…

Nvidia Jetson 编解码开发(5)Jetpack 5.x版本Multimedia API 硬件编码开发

1.前言 基于之前的开发程序 Nvidia Jetson 编解码开发(2)Jetpack 4.x版本Multimedia API 硬件编码开发--集成encode模块_free-xx的博客-CSDN博客 开发版本是基于JetPack 4.x版本 现在需要迁移到JetPack 5.x版本(新发布的Orin/Orin NX/Orin Nano都是JetPack 5.x版本) 尝…

Arch Linux 开发人员近日发布了 Archinstall 2.6

导读经过几个月的努力,Arch Linux 开发人员近日发布了 Archinstall 2.6,作为 Arch Linux 官方文本模式安装程序的最新稳定版本,它带来了几个新功能和许多改进。 Archinstall 2.6 支持 Hyperland 自定义动态平铺 Wayland 窗口管理器&#xff0…

Python在文件中对字母、单词频度统计

读入给定的文本文件“hamlet.txt”,编写两个函数分别实现: 1) 统计所有字母的出现频度,依据频度从高到低,显示前5个字母及其频度,同时把结果写入文件“hamlet_字母频度.txt”。 2) 统计所有单词的出现频度,依据频度从高到低,显示…

数据结构作业——哈夫曼树

/*【基本要求】 (1) 从文件中读出一篇英文文章,包含字母和空格等字符。 (2) 统计各个字符出现的频度。 (3) 根据出现的频度,为每个出现的字符建立一个哈夫曼编码,并输出。…

Open-Cascade 编译全过程-以及注意事项

1.从Github上下载 该源码库; https://github.com/Open-Cascade-SAS/OCCT 2.再从下面网站,下载需要的地方库文件: 从这个地址下载需要的文件; 3rd party Components | Open CASCADE Technology 3.使用cmak gui进行构建编译; 关键地方以及坑所在得点: 如果其编…

打破壁垒,实现高效的跨部门协作与沟通

在如今复杂多变的商业环境下,企业间需要跨越多个部门的壁垒进行协作及沟通以完成企业目标。尽管如此,许多企业仍然面临协作过程中出现不必要的误解、重复、延迟和错失机会等问题。为此,现代技术提供了一些解决方案,其中最为成功的…

【Terraform学习】使用 Terraform 创建Amazon VPC(Terraform-AWS最佳实战学习)

使用 Terraform 创建Amazon VPC 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_vpc 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_secret_key和 区域变量…

视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…

永久设置pip指定国内镜像源(windows内)

1.首先列出国内四个镜像源网站: 一、清华源 https://pypi.tuna.tsinghua.edu.cn/simple/ 二、阿里源 https://mirrors.aliyun.com/pypi/simple 三、中科大源 https://pypi.mirrors.ustc.edu.cn/simple/ 四、豆瓣源 http://pypi.douban.com/simple/ 2.一般下载所需要…

什么是SaaS、PaaS、aPaaS、iPaaS、IaaS,一文讲透

在数字化的带动下,各行业对云服务的需求进入快速增长期。 SaaS、PaaS、aPaaS、iPaaS、IaaS…… 这些词经常出现,那么他们分别是什么意思?又有什么区别?小帆带大家一起来看看~ SaaS SaaS,Software as a Service&…

数字乡镇综合解决方案[59页PPT]

导读:原文《数字乡镇综合解决方案[59页PPT]》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 喜欢文章,您可以关注评论转发本文,了…

医疗设备管理软件哪家好?医院设备全生命周期管理要怎么做?

随着医学技术的不断进步,医疗设备变得越来越先进,越来越复杂。因此,医疗设备的管理也变得越来越重要。传统的医疗设备管理方式存在很多问题,比如设备数据难统计、报修方式难统一、巡检维保难规范等。为了解决这些问题,…