软件体系结构

第一章

构件

具有某种功能的

可复用的软件结构单元,为组装服务,可部署,具有规范的接口规约和显式的语境依赖

构件模型

构件模型是对构件本质特征的抽象描述,可以把它想象成一个类的组合,它封装了多个类,并具有一个或多个服务而提供了简单的接口。

构件重用

构件重用是指在软件开发过程中,复用已有的软件构件,并将其集成到新系统中,以实现软件生产的高效率、高质量和低成本。这里的构件可以是源代码、设计文档、测试用例等任何可重用的软件元素。

软件体系结构定义

由构件+连接件+拓扑结构+约束+质量属性组成

软件体系结构的作用

交流的手段,可复用可传递的模型,体现关键决策

软件体系结构的发展历史

汇编语言->数据流图控制流图->uml->以描述系统的高层抽象为中心,4+1模型

第二章

软件体系结构描述

非标准的图形符号,uml,mil.adl

(1)⾮标准图形符号描述:语义丰富、不精确、没有形式化基础;

(2)统⼀建模语⾔UML:语义丰富、相对精确、有少量的形式化基础;

(3)模块接⼝语⾔:语义⽐较丰富,但局限在实现级别,层次较低,语义精确,有编译器作保 证,没有或极少有形式化基础;

(4)体系结构描述语⾔ADL:语义不够丰富,语义精确,有形式化基础。

软件体系结构的核心概念

构件:可复用的软件体系结构单元

连接件:构件之间的交互并实现构件之间的连接

接口与服务  构件作为封装的实体,通过接口与外部环境交互,内部实现的功能以服务的形式体现出来并通过接口向外发布,进而产生与其他构件之间的关联

构件的粒度 构件的相对大小,规模,细节程度或关注程度的一个属性

连接 构件间建立与维护行为关联与信息传递的途径, 需要有实现连接的物质基础以及连接的协议支持

同步:过程调用开始,调用者必须等待被调用过程执行完成,才能执行后续任务

异步:过程调用开始,同时调用者不用等待,而是继续执行后续任务

软件体系结构模型

sa作用

利于交流

利于分析验证SA设计的优劣

指导开发人员开发

为之后的软件维护提供文档

Sa建模的三个层次

图形化模型,

形式化模型,

文档化模型

(1)图形化模型: 从不同的视⻆描述特定系统的体系结构,从⽽得到多个视图,并将这些视图组织起来以描述整体的SA模型;

(2)形式化模型: 在SA基本概念的基础上,选取适当的形式化或半形式化的⽅法来描述⼀个特定的体系结构;

(3)⽂档化模型: 记录和整理软件体系结构设计⽅案的各类细节。

使用多视图建模的原因

系统复杂,简单的一维模型无法描述

从多个角度建立模型,分别刻画某一方面的性质,体现关注点分离

4+1视图模型

逻辑视图  描述系统的功能 功能需求,系统最终提供给用户的服务,类图,活动图,顺序图

开发视图  描述系统子系统,模块之间的关系 模块视图,实现视图,开发期质量属性 可扩展可重用可移植易理解易测试,构件图

处理视图  描述系统进程以及之间的通信协作关系 ,运行期质量属性,类图,交互图,状态转换图

物理视图  描述系统如何被安装部署 安装与部署需求,部署图,包图

场景视图  描述系统典型场景与功能 用例视图,最终用户所需求的功能

系统的静态结构:逻辑视图,开发视图

系统的动态结构:物理视图,进程视图

软件体系结构的生命周期

非规范化描述->规范化描述->求精与验证->实施->演化与扩展->评价与度量->终结

第三章

软件体系结构风格概述

软件体系结构⻛格是指设计、组织和实现软件体系结构的各种惯⽤模式和习惯⽤法,是对⼀系列体系结构设计的抽象。

数据流体系结构风格

批处理 

每一个处理步骤是独立的程序

每一步必须在前一步结束后才能开始

数据必须是完整的,以整体的方式传递

管道过滤器

系统分解为几个顺序的处理步骤,即是过滤器

这些步骤之间通过数据流进行连接,即是管道

每个过滤器都有一组输入与输出

过滤器从管道中读取输入的数据流,经过内部处理,然后产生输出数据流并写入管道中

管道过滤器的优点

高内聚,低耦合,

将复杂的输入输出看成多个过滤器行为的简单合成

支持软件复用

系统维护和增强系统性能简单

允许对一些如吞吐量,死锁等属性的分析

支持并行执行

管道过滤器的缺点

导致进程成为批处理的结构

不适合处理交互的应用

增加编写过滤器的复杂性,导致系统性能下降

批处理与管道过滤器的比较

相似点:

都把任务分解为一系列固定顺序的计算单元

彼此之间通过数据传递交互

不同点:

层次体系结构风格

系统分为若干个层次,每一个层次由一系列构件构成

下层构件向上层构件提供服务

上层构件被看作下层构件的客户端

交互只在相邻的层次之间发生

优点:基于抽象递增,支持功能增强,支持重用

缺点:难以分层

C/S 与 B/S体系结构风格

⼆层C/S、三层C/S、B/S,以及C/S与B/S混合架构⻛格示意图及其含义

答:

B/S(browser/server): 浏览器-服务端架构,由浏览器向服务器发送请求,服务器向浏览器 ⻚⾯进⾏响应。

C/S(client/server): 客户端-服务端,由客户端应⽤向服务器发送⽹络请求,有服务端向客户端应⽤响应。客户端通常负责处理⽤户界⾯和输⼊数据,⽽服务器则负责处理应⽤程序逻辑和数据存储。

三层C/S,它将应⽤程序分成三个层次:表示层(Presentation Layer)、应⽤层(Application Layer)和数据层(Data Layer)。表示层负责处理⽤户界⾯,应⽤层负责处理应⽤程序逻辑, 数据层负责处理数据存储和检索。

B/S、C/S混合架构:指将B/S架构和C/S架构进⾏结合,通过服务器端的中间件来协调前端浏览器和后端应⽤程序之间的交互。在这种架构中,前端⽤户界⾯仍然是基于浏览器的Web应⽤程 序,但是通过中间件与后端服务器进⾏交互,后端服务器可以提供更多的应⽤逻辑和数据处理 功能。
 

胖客户端:客户端有较多的的业务处理逻辑

瘦客户端:客户端很少的业务处理逻辑

事件系统风格

事件系统包括发布,订阅,等基本过程

系统中的组件将发布事件到事件中心

其他组件可以订阅这个事件

当事件被传播时自动调用已经订阅了该事件的组件

该组件内部事件处理程序执行

每个事件订阅者有自己独立的事件处理程序

事件发布者不关心她所发布的事件如和被调用

仓库风格

第四章

为什么引入soa

需求拉动,技术推动

什么是soa

面向服务的软件体系结构

Soa典型特征

分布式异构系统的集成与互操作

松散耦合

大数据量低频率访问

基于文本的信息传递

上下文无关

大粒度复用

Soa实现

Web服务,企业服务总线

第五章

中间件

一种软件,位于系统软件与应用软件之间,使得应用层中的各个应用成分实现跨网络的协同工作

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

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

相关文章

什么是垃圾回收(Garbage Collection)?

垃圾回收(Garbage Collection)是一种自动管理内存的机制,在编程语言中,它负责自动检测和释放不再被程序使用的内存,以避免内存泄漏和内存碎片的问题。 以下是一段示例代码: public class Example {public…

Spark 的Standalone集群环境安装与测试

目录 一、Standalone 集群环境安装 (一)理解 Standalone 集群架构 (二)Standalone 集群部署 二、打开监控界面 (一)master监控界面 (二)日志服务监控界面 三、集群的测试 &a…

react的antd-mobile使用Steps显示物流

antd-mobile的图标,是需要安装依赖的 step如果只有一个步骤是不会展示的,代码里面的标题那块可以看出来 尝试了很多遍测试发现一直不显示,查询后发现是这个组件的本身设置的原因 那么就算你只展示一个那么也要写两个step,第二个…

基于鸟类AI识别的果园智能物联网解决方案

1. 项目背景 我国拥有广阔的果园种植面积,但每年因鸟类造成的损失高达数亿元。传统的防鸟害措施,如建立防护网和使用物理化学方法,效果并不理想,且成本较高。为了解决这一问题,深圳快瞳科技有限公司的提出基于鸟类AI识…

uniapp 使用vue/pwa

vue add vue/pwa src下创建service-worker.js /* eslint-disable no-undef*/ importScripts(https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js) if (workbox) {console.log(Yay! Workbox is loaded 🎉) } else {console.log(Boo! Workbo…

Java 实现接口幂等的九种方法:确保系统稳定性与数据一致性

摘要: 在分布式系统中,接口的幂等性至关重要,它能确保重复请求不会导致意外的副作用。本文深入探讨了 Java 实现接口幂等的九种方法,包括数据库唯一约束、状态机、分布式锁等,并通过详细的代码示例和实际应用场景&…

让Erupt框架支持.vue文件做自定义页面模版

Erupt是什么? Erupt 是一个低代码 全栈类 框架,它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等后台功能。 零前端代码、零 CURD、自动建表,仅需 一个类文件 简洁的注解配置,快速开发企业级 Admin 管理后台。 提…

如何优雅处理异常?处理异常的原则

前言 在我们日常工作中,经常会遇到一些异常,比如:NullPointerException、NumberFormatException、ClassCastException等等。 那么问题来了,我们该如何处理异常,让代码变得更优雅呢? 1 不要忽略异常 不知…

OCR与PaddleOCR介绍

OCR技术与PaddleOCR的介绍 在数字化时代,光学字符识别(OCR,Optical Character Recognition)技术变得越来越重要。OCR技术可以将图像中的文本转换为可编辑和可搜索的文本格式,广泛应用于文档数字化、自动化数据输入、车…

DBAPI连接阿里云 maxcompute 报错

使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar ,这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar,这个不是完整的,它还…

2024最新Python安装教程+Pycharm安装教程【附安装包】

Python安装 1.首先下载好Python安装包 获取方式:点击这里(扫描神秘②薇码免下载)完全免费!!! 2.打开安装包,先勾选最下面两个选项,再选择第二个自定义安装 3.这里默认全选&#xff…

Fatal error: Uncaught Error: Call to undefined function mysql_connect() 解决办法详细

情况一 Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /www/wwwroot/www.ygwzjs.cn/dg_upload/class/db_sql.php:72 Stack trace: #0 /www/wwwroot/www.ygwzjs.cn/dg_upload/class/combakfun.php(192): do_dbconnect_common(localhost, , guiz…

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片(Shard): 将索引数据分割成多个部分,每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理,从而提高系统的扩展性和性能。 在创建索…

Oracle 第19章:高级查询技术

在Oracle数据库中,高级查询技术是数据库管理员和开发人员必须掌握的重要技能。这些技术能够帮助优化查询性能,简化复杂的查询逻辑,并提高数据处理的效率。本章将重点讨论两个关键概念:子查询和连接与并集操作。 子查询 定义: 子…

JAVA基础:数组 (习题笔记)

一,编码题 1,数组查找操作:定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”&…

pytoch单卡改多卡ddp训练

参考:https://blog.csdn.net/weixin_44966641/article/details/121872773 单卡代码,启动代码 python train.py: import torch import torch.nn as nn from torch.optim import SGD from torch.autograd import Variable from torch.utils.da…

【学习】使用webpack搭建react项目

前言 在日常工作中,我大多是在已有的项目基础上进行开发,而非从头构建项目。因此,我期望通过本次学习能填补我在项目初始化阶段知识的空白,与大家共同进步。在此过程中,我欢迎并感激任何指正或建议,无论是…

什么是人工智能体?

人工智能体(AI Agent)是指能够感知环境、做出决策并采取行动以实现特定目标的自主实体。以下是对人工智能体的具体介绍: 定义与核心概念 智能体的定义:智能体,英文名为Agent,是指具有智能的实体&#xff0…

【笔记】前后端互通中前端登录无响应

后来的前情提要 : 后端的ip地址在本地测试阶段应该设置为localhost 前端中写cors的配置 后端也要写cors的配置 且两者的url都要为localhost 前端写的baseUrl是指定对应的后端的ip地址以及端口号 很重要 在本地时后端的IP的地址也必须为本地的 F12的网页报错是&a…

【初阶数据结构篇】链式结构二叉树(续)

文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…