当前位置: 首页 > news >正文

软件架构的概念

1.软件架构演化

为了适应用户的新需求、业务环境和运行环境的变化等,软件架构需要不断地进行自身的演化,也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲,软件架构的演化就是软件整体结构的演化,演化过程涵盖软件架构的全生命周 期,包括软件架构需求的获取软件架构建模软件架构文档软件架构实现以及软件架构维护等阶段。

为什么软件架构演化如此重要?

首先,软件架构作为软件系统的骨架支撑着整个软件系统,是软件系统具备诸多好的特性的重要保障。因为最终软件系统的性能、可靠性、安全性和易维护性等是软件系统最重要的质量和功能属性,是决定软件系统是否被用户接受、是否具有市场竞争力、是否具有进一步改造升级的可能性、是否具有较长生命周期的重要因素;软件架构自身的好坏直接影响着它们是否满足用户需求,而软件架构演化正是为了保障这些方面向人们预期的方向发展的重要措施。 

2.两个层次(数据设计和体系结构设计)

软件体系结构的设计通常考虑到设计金字塔中的两个层次——数据设计和体系结构设计。

数据设计体现传统系统中体系结构的数据构件和面向对象系统中类的定义(封装了属性和操 作),体系结构设计则主要关注软件构件的结构、属性和交互作用。

3.软件架构复用的类型(机会复用和系统复用)

软件架构复用的类型包括机会复用系统复用,机会复用是指开发过程中,只要发现有可复用的资产,就对其进行复用。系统复用是指在开发之前,就要进行规划,以决定哪些需要复用。

4.视角(perspective)

当考虑架构时,重要的是从不同的视角(perspective)来检查,这促使设计师考虑具体架构的不同属性。例如:展示功能组织的静态视角能判断质量特性,展示并发行为的动态视角能判断系统行为特性。

在ABSD(基于架构的软件设计)方法中,使用不同的视角来观察设计元素,一个子系统并不总是一个静态的架构元素,而是可以从动态和静态视角观察的架构元素。

将选择的特定视角或视图与Kruchten提出的类似,也就是逻辑视图、进程视图、实现视图和配置视图。使用逻辑视图来记录设计元素的功能和概念接口,设计元素的功能定义了它本身在系统中的角色,这些角色包括功能性能等。进程视图也称为并发视图,使用并发视图来检查系统多用户的并发行为。使用“并发”来代替“进程”,是为了强调没有对进程或线程进行任何操作,一旦这些执行操作,则并发视图就演化为进程视图。使用的最后一个视图是配置视图,配置视图代表了计算机网络中的节点,也就是系统的物理结构。

5.软件架构设计

软件架构设计包括提出架构模型、产生架构设计和进行设计评审等活动,是一个迭代的过程,在建立软件架构的初期,一般需要选择一个合适的架构风格,并将架构分析阶段已标识的构件映射到架构中,并分析这些构件之间的关系,一旦得到了详细的软件架构设计,需要邀请独立于系统开发的外部人员对系统进行评审。一般来说,软件架构设计活动将已标识构件集成到软件架构中,设计这些构件,但不予以实现。

6.ANSI/IEEE 1471-2000标准

ANSI/IEEE 1471-2000是描述软件架构的第一个标准,其中要素的关系如下:

第一层:mission

第二层:Environment,System,Architecture

第三层:Stakeholder,Architectural Description,Rationale

第四层:Concern,Viewpoint,View

第五层:Library Viewpoint,Model

Mission:翻译成中文就是任务,使命。也就是为什么我们要做这个系统。可能的原因是为了更大的赢利,市场占有率更高,完善产品系列等等。

System:翻译成中文就是系统。具体的定义是:一系列组件,组织在一起,相互作用从而完成一个或者一些特殊的功能。

Model:直译成模型。就是用来表达视图的方法。直白地说,就是系统中各种元素是如何组织在一起发挥作用。用图形化的表示把看到的东西表达出来。

Architecture:系统架构。每个系统有一个架构。是对所有利益相关人的关注点(Concern)的响应和回答,通过架构描述(Architecture Description)来说明。

在ANSI/IEEE 1471-2000标准中,系统是为了达成利益相关人(Stakeholder)的某些使命(Mission),在特定环境(Enviroment)中构建的。每一个系统都有一个架构(Architecture)。架构(Architecture)是对所有利益相关人的关注点(Concern)的响应和回答,通过架构描述(Architecture Description)来说明。每一个利益相关人都有各自的关注点。这些关注点是指对其重要的,与系统的开发、运营或其他方面相关的利益。

架构描述(Architecture Description)本质上是多视图的。每一个视图(View)是从一个特定的视角(Viewpoint)来表述架构的某一个独立的方面。试图用一个单一的视图来覆盖所有的关注点当然是最好的,但实际上这种表述方式将很难理解。

视角(Viewpoint)的选择,基于要解决哪些利益相关人的哪些关注点。它决定了用来创建视图的语言、符号和模型等,以及任何与创建视图相关的建模方法或者分析技术。一个视图(View)包括一个或者多个架构模型(Model),一个模型也可能参与多个视图。模型较文本的表述的好处在于,可以更容易的可视化、检查、分析、管理和集成。

相关文章:

软件架构的概念

1.软件架构演化 为了适应用户的新需求、业务环境和运行环境的变化等,软件架构需要不断地进行自身的演化,也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲,软件架构的演化就是软件整体结构的演化,演化过程涵盖…...

kubernetes存储-secrets

一、从文件创建 二、编写yaml文件 三、将Secret挂载到Volume中 四、向指定路径映射 secret 密钥 五、将Secret设置为环境变量 六、存储docker registry的认证信息...

Springboot使用EasyExcel导入导出Excel文件

1&#xff0c;准备Excel文件和数据库表结果 2&#xff0c;导入代码 1&#xff0c;引入依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifac…...

Pytorch L1,L2正则化

L1正则化和L2正则化是常用的正则化技术&#xff0c;用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。 L1正则化&#xff08;Lasso正则化&#xff09;&#xff1a; 正则化项形式&#xff1a;L1正则化使用模型参数的绝对值之和作为正则化…...

【Elasticsearch 未授权访问漏洞复现】

文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&am…...

pytorch笔记:PackedSequence对象送入RNN

pytorch 笔记&#xff1a;PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN&#xff08;如LSTM或GRU&#xff09;时&#xff0c;RNN内部会进行特定的操作来处理这种特殊的输入形式。 使用PackedSequ…...

C#WPF工具提示(ToolTip)实例

本文演示C#WPF工具提示(ToolTip)实例 ToolTip ToolTip是当鼠标移到某个控件上后可以弹出提示的控件 属性说明 1、HasDropShadow 决定工具提示是否具有扩散的黑色阴影,使其和背后的窗口区别开来 2、Placement 使用PlacementMode枚举值决定如何放置工具提示。默认值是M…...

智慧矿山系统中的猴车安全监测与识别

智慧矿山是近年来兴起的一种采用人工智能&#xff08;AI&#xff09;技术的矿山管理方式&#xff0c;它通过利用智能传感设备和先进算法来实现对矿山环境和设备进行监测和管理&#xff0c;从而提高矿山的安全性和效率。在智慧矿山的AI算法系列中&#xff0c;猴车不安全行为识别…...

网络协议--TCP连接的建立与终止

18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。本章将详细讨论一个TCP连接是如何建立的以及通信结束后是如何终止的。 这种两端间连接的建立与无连接协议如UDP不同。我们在第11章看到一端使用UDP向另一端发…...

react条件渲染

目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中&#xff0c;条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…...

Docker中Failed to initialize NVML: Unknown Error

参考资料 Docker 中无法使用 GPU 时该怎么办&#xff08;无法初始化 NVML&#xff1a;未知错误&#xff09; SOLVED Docker with GPU: “Failed to initialize NVML: Unknown Error” 解决方案需要的条件: 需要在服务器上docker的admin list之中. 不需要服务器整体的admin权限.…...

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!

目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2&#xff0e;单样本秩和检验 四、结果解读第一&#xff0c;假设检验摘要第二&#xff0c;Wilcoxon符号检验结果摘要。第三&#xff0c;Wilcoxon符号秩检验图第四&#xff0c;数…...

ttkefu在线客服在客户联络领域的价值

随着互联网的快速发展&#xff0c;越来越多的企业开始注重在线客服的应用。ttkefu作为一款智能在线客服系统&#xff0c;在客户联络领域中展现出了巨大的价值。本文将详细介绍ttkefu在线客服在客户联络领域的应用优势、专家分析以及未来发展趋势。 一、ttkefu在线客服简介 tt…...

创新方案|2023如何用5种新形式重塑疫后实体门店体验

在电商盛行的当下&#xff0c;线上购物已成为新零售的重要组成部分&#xff0c;实体零售业正处于两难境地。一方面&#xff0c;实体零售是绝对有必要的&#xff1a;美国约 85% 的销售额来自实体商店。 另一方面&#xff0c;尽管增长放缓&#xff0c;但电商收入占销售总额的比例…...

Aqua Data Studio 2023.1

为什么选择 Aqua Data Studio&#xff1f; 随着数据在业务中的作用不断发展&#xff0c;组织需要一种有效的方法来简化复杂的技术任务并缩小 IT 和业务团队之间的差距。 使用多个数据库平台不再复杂。使用 Aqua Data Studio 简化您的所有数据管理流程和任务&#xff1a;这是一…...

【C++智能指针】

智能指针 为什么使用智能指针&#xff1f;概念分类auto_ptrunique_ptrshared_ptr循环引用weak_ptr 为什么使用智能指针&#xff1f; 考虑以下场景&#xff1a; void div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return…...

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)

目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…...

OSPF复习(2)

目录 一、LSA的头部 二、6种类型的LSA&#xff08;课堂演示&#xff09; 1、type1-LSA&#xff1a;----重要且复杂 2、type2-LSA&#xff1a; 3、type3-LSA&#xff1a; 4、type4-LSA&#xff1a; 5、type5-LSA&#xff1a; 6、type7-LSA&#xff1a; 三、OSPF的网络类…...

FPGA时序分析与约束(9)——主时钟约束

一、时序约束 时序引擎能够正确分析4种时序路径的前提是&#xff0c;用户已经进行了正确的时序约束。时序约束本质上就是告知时序引擎一些进行时序分析所必要的信息&#xff0c;这些信息只能由用户主动告知&#xff0c;时序引擎对有些信息可以自动推断&#xff0c;但是推断得到…...

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…...

ubuntu环境下为python项目配置taotoken多模型api密钥与端点

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Ubuntu环境下为Python项目配置Taotoken多模型API密钥与端点 1. 准备工作 在Ubuntu系统上为Python项目接入Taotoken&#xff0c;首…...

AI 如何改变软件工程:Martin Fowler 视角 + 实战洞见

AI 如何改变软件工程&#xff1a;Martin Fowler 视角 实战洞见 AI&#xff08;尤其是 LLM&#xff09;是软件工程自高级语言&#xff08;从汇编到 C/Fortran&#xff09;以来最大的转变。它引入了非确定性&#xff08;Non-deterministic&#xff09;编程&#xff0c;改变了从编…...

当B站字幕不再只是弹幕:你的个人学习宝库解锁指南

当B站字幕不再只是弹幕&#xff1a;你的个人学习宝库解锁指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还记得那个深夜吗&#xff1f;你正在B站追着某个技术…...

ABS+神经网络:端到端宇宙学参数推断新范式解析

1. 项目概述&#xff1a;当ABS遇上神经网络&#xff0c;一个端到端宇宙学参数推断新范式的诞生 在宇宙学研究的核心地带&#xff0c;有一项任务既令人着迷又充满挑战&#xff1a;如何从宇宙微波背景&#xff08;CMB&#xff09;这张宇宙婴儿时期的“照片”中&#xff0c;精准地…...

Godot4地图分层绘制实战:从图层混乱到专业场景管理的避坑指南

Godot4地图分层绘制实战&#xff1a;从图层混乱到专业场景管理的避坑指南当你第一次在Godot4中完成一个复杂场景的TileMap绘制时&#xff0c;那种成就感无与伦比。但随着场景复杂度提升&#xff0c;你是否遇到过这些头疼问题&#xff1a;角色明明站在树后却被树叶遮挡&#xff…...

跟着 MDN 学CSS day_17:(深入理解溢出机制与容器控制艺术)

在CSS的世界里&#xff0c;一切皆为盒子。当我们精心设定盒子的宽度和高度&#xff0c;试图构建完美的布局时&#xff0c;一个不可避免的问题就会悄然出现&#xff1a;**如果内容超出了盒子的承载能力&#xff0c;会发生什么&#xff1f;**这就是CSS中一个至关重要的概念——溢…...

Spiderbuf_H05时间戳机制深度解析:锚点偏移与服务端校验

1. 这不是“破解”&#xff0c;是时间戳反爬机制的逆向解构你打开浏览器按F12&#xff0c;切到Network面板&#xff0c;刷新页面&#xff0c;盯着XHR请求发呆——那个带一长串数字的timestamp参数&#xff0c;每次刷新都变&#xff0c;但又不是随机乱跳&#xff0c;而是和当前时…...

Cloudflare四重验证机制与行为建模反爬原理深度解析

1. 这不是“绕过Cloudflare”&#xff0c;而是重新理解“人机边界”的实战现场最近两周&#xff0c;我连续接手了三个爬虫项目&#xff0c;全卡在同一个地方&#xff1a;Cloudflare的“Checking your browser before accessing...”页面。不是5秒跳转失败&#xff0c;就是直接返…...

Burp Suite Galaxy插件实战:上下文感知解密中枢搭建指南

1. 为什么Galaxy插件不是“又一个加解密工具”&#xff0c;而是Burp生态里真正能落地的解密中枢 你有没有遇到过这样的场景&#xff1a;在Burp Suite里抓到一串密文&#xff0c;比如 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... &#xff0c;第一反应是复制进JWT.io——结果发现…...

机器学习在糖尿病并发症预测中的应用:逻辑回归、SVM与随机森林对比实践

1. 项目概述&#xff1a;当机器学习遇见糖尿病并发症预测作为一名长期关注医疗数据分析的从业者&#xff0c;我见过太多糖尿病患者在确诊心肾并发症时&#xff0c;病情已进展到中晚期&#xff0c;治疗窗口期大大缩短。糖尿病本身的管理已足够复杂&#xff0c;而其引发的慢性肾病…...