【系统架构师】-软件架构设计

news2024/10/6 22:31:30

1、软件架构的概念

架构的本质
1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象。
2、软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束


架构的作用
1、软件架构是项目干系人进行交流的手段
2、软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
3、软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。

架构设计就是需求分配,满足需求的职责分配到组件上。

通过不同的视角和视图

架构的4+1视图

以场景为核心、

逻辑视图为最终用户描述功能需求。

UML4+1视图

以用例为核心、建立需求分析模型

逻辑视图为系统分析、设计人员提供类与对象。

2、软件架构风格

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

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

2.1、数据流风格

前一步的结果是后一步的输入内容【数据驱动】、分步处理

批处理序列:大量整体数据、无需用户交互
管道-过滤器:流式数据、弱用户交互

2.2、调用/返回风格

构件之间直接交互、紧耦合

主程序/子程序:面向过程
面向对象:对象的方法调用
分层:层与层之间的方法调用,包含OSI七层

2.3、独立构件风格

构件之间不直接交互、松耦合

丢失了对子函数的控制权、

事件触发,添加了事件管理机制、隐式调用

 2.4、虚拟机风格

解释器、规则引擎

2.5、仓库风格

数据为中心,建立仓库,实现数据共享

1、数据库系统

2、黑板系统:记录、交换、跟进信息、触发知识源。如语音识别、知识推理。

3、超文本系统

现代软件编译器:以仓库风格为主,以 源码编译后作为数据中心 ,集成各类开发、调试工具
传统编译器:数据流-批处理
断点调试->事件风格
操作系统注册表->仓库风格

2.6、闭环控制架构(过程控制

适合于嵌入式系统,用于解决简单闭环控制问题。
经典应用:空调温控,定速巡航。

2.7、C2风格

构件和连接件都有一个顶部和一个底部。

构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连。

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

当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

层次性架构风格、总线系统

2.8、层次架构风格

属于调用/返回风格

2.8.1、两层C/S架构

客户端:表示层、业务处理

服务端:数据层、数据读取/存储

2.8.2、三层C/S架构

表示层:客户端,只用于内容显示、提交请求

功能层:应用服务器,接受表示层数据,并读取数据层数据,业务处理。

数据层:数据服务器,数据存储

2.8.3、B/S架构

B/S架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能

B/S架构的安全性难以控制

采用B/S架构的应用系统,在数据查询等响应速度上,要远远低于C/S架构

B/S架构的数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用

2.8.4、三层B/S架构

2.8.4.1、MVC架构风格

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

打破了层与层的独立交互

J2EE体系结构中:
视图(View): JSP
控制(Controller): Servlet
模型(Model): EntityBean、Session Bean 、EJB

2.8.4.2、MVP架构风格

MVP是MVC的变种
MVP实现了V与M之间的解耦(V不直接使用M,修改V不会影响M)
MVP更好的支持单元测试(业务逻辑在P中,可以脱离V来测试这些逻辑;可以将一个P用于多

个V,而不需要改变P的逻辑)
MVP中V要处理界面事件,业务逻辑在P中,MVC中界面事件由C处理

主要的程序 逻辑在Presenter里实现
通过定义好的接口进行交互
用于处理view频繁的修改
如:点赞、收藏等。
定时异步发送请求

2.8.4.3、MVVM架构

视图View

View-Model:动态渲染、监听数据变动

模型Model

2.8.4.4、RIA架构
富互联网 rich internet
Flex 相当于小程序,伪客户端

RIA结合了C/S架构反应速度快、交互性强的优点,及B/S架构传播范围广及容易传播的特性
RIA简化并改进了B/S架构的用户交互
数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面

2.8.5、混合架构风格

内外有别模型

查改有别模型

 2.9、基于服务的架构SOA

对象、构件、服务

服务构件粗粒度,传统构件细粒度居多

服务构件的接口标准化,主要是WSDL接口,传统构件常以具体API形式出现服务构件的实现与语言无关,传统构件绑定某种特定语言

服务构件可以通过构件容器提供QoS的服务,传统构件完全由程序代码直接控制

Web Service、ESB

特点:

提供位置透明性的消息路由和寻址服务

提供服务注册和命名的管理功能

支持多种的消息传递范型

支持多种可以广泛使用的传输协议

支持多种数据格式及其相互转换

提供日志和监控功能

WSDL就是WebService接口对应的WSDL文件,该文件通过xml格式说明如何调用,可以看作WebService的接口文档(使用说明书) 

2.10、微服务

特点

小,且专注于做一件事情

轻量级的通信机制

松耦合、独立部署

优势

技术异构性

弹性

扩展

简化部署

与组织结构相匹配

可组合性

对可替代性的优化

挑战

分布式系统的复杂度

运维成本

部署自动化

服务间依赖管理
DevOps与组织结构
服务间依赖测试

2.11、MDA模型驱动架构

1)平台独立模型(PIM):具有高抽象层次、独立于任何实现技术的模型。
2)平台相关模型(PSM):为某种特定实现技术量身定做,让你用这种技术中可用的实现上构造来描述系统的模型。PIM会被变换成一个或多个PSM。
3)代码Code:用源代码对系统的描述(规约)。每个PSM都将被变换成代码。

 

3、架构描述语言ADL

形式化的语言

基本元素:

1、构件:计算或数据存储单元

2、连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则。

3、架构配置:描述体系结构的构件与连接件的连接图

4、特定领域软件架构DSSA

基本活动:

1、领域专家:有经验的用户、从事该领域中系统的需求分析、设计、实现以及项目管理的有经验的软件工程师等。
领域专家的主要任务包括提供关于领域中系统的需求规约和实现的知识。
2、领域分析人员:领域分析人员应由具有知识工程背景的有经验的系统分析员来担任。
3、领域设计人员:领域设计人员应由有经验的软件设计人员来担任。
4、领域实现人员:领域实现人员应由有经验的程序设计人员来担任。

建立过程 

 

 

5、基于架构的软件开发ABSD

ABSD方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。

ABSD方法有三个基础。

第一个基础是功能的分解。在功能分解,ABSD方法使用已有的基于模块的内聚和耦合技术;

第二个基础是通过选择架构风格来实现质量和业务需求;

第三个基础是软件模板的使用。

视角与视图:从不同的视角来检查,所以会有不同的视图。4+1

用例用来捕获功能需求、特定场景用来捕获质量需求

开发过程:

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

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

相关文章

creo扫描杯子学习笔记

creo扫描杯子学习笔记 扫描2要素: 轨迹, 截面。 多用于曲线扫描,区别于拉伸命令。 大小自定 旋转扫描 抽壳 草绘把手 扫描把手 复制曲面 实例化切除 成型

Leetcode 148. 排序链表

心路历程: 这道题通过很简单,但是如果想要用O(1)的空间复杂度O(nlogn)的时间复杂度的话,可能得需要双指针快排的思路。 解法:遍历模拟 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0…

容器和K8s常见概念

【容器】 1、Open Container Initiative(OCI):制定和推动容器格式和运行时的开放标准。容器运行时需要遵循此标准。主要的产出物包括: OCI Image Specification: 定义容器镜像格式的规范,统一描述容器镜像的内容和结…

软考高级架构师:嵌入式系统的内核架构

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【C++进阶】哈希思想之哈希表和哈希桶模拟实现unordered_map和unordered_set

哈希表和哈希桶 一,什么是哈希二,关联式容器unordered_map/set1. unordered_map2. unordered_set 三,哈希的结构1. 哈希函数2. 哈希冲突 四,哈希表(闭散列)及其模拟实现五,哈希桶(开…

Android JNI调试总结

1、确保NDK和CMake已经安装 新建能编译APK的工程,工程中添加相关ndk目录 2、添加C模块 添加完成后,工程目录自动更新,build.gradle导入了so编译器 修改build.gradle中添加相关gcc编译器如下 externalNativeBuild { cmake { abiFilters a…

零信任安全模型:构建未来数字世界的安全基石

在数字化转型的浪潮中,云原生技术已成为推动企业创新和灵活性的关键力量💡。然而,随着技术的进步和应用的广泛,网络安全威胁也日益严峻🔓,传统的网络安全模型已经难以应对复杂多变的网络环境。在这样的背景…

webpack环境配置分类结合vue使用

文件目录结构 按照目录结构创建好文件 控制台执行: npm install /config/webpack.common.jsconst path require(path) const {merge} require(webpack-merge) const {CleanWebpackPlugin} require(clean-webpack-plugin) const { VueLoaderPlugin } require(vue-loader); c…

Spring Security——11,自定义权限校验方法

自定义权限校验方法 一键三连有没有捏~~ 我们也可以定义自己的权限校验方法,在PreAuthorize注解中使用我们的方法。 自定义一个权限检验方法: 在SPEL表达式中使用 ex相当于获取容器中bean的名字未ex的对象。然后再调用这个对象的 hasAuthority方法&am…

中文地址分词器源码阅读(jiedi)

文章目录 structure.p文件pd.read_excelenumerate思维导图核心源码讲解jiedi.pytrain.py 总结 structure 点击左边的Structure按钮就如Structure界面。从Structure我们可以看出当前代码文件中有多少个全局变量、函数、类以及类中有多少个成员变量和成员函数。 其中V图标表示全…

mid转MP3怎么转?一分钟搞定~

MIDI(Musical Instrument Digital Interface)文件格式的诞生可以追溯到上世纪80年代,音频技术迅速崛起。为了让不同音乐设备之间能够互相通信,MIDI格式成为了音乐的标准。它不同于常见的音频文件格式,不包含实际的声音…

基于java web的超市管理系统

摘要 随着社会经济的不断发展,人们的生活水平不断提高。越来越多的零售行业得到了快速的发展,以最常见的超市最为明显。零售行业繁荣的背后也随之带来了许多行业隐患,越来越激烈的行业竞争不断的要求经营者更加高要求的管理超市内部的整个供…

CleanMyMac有必要购买吗?有哪些功能

作为一位产品营销专家,对各类软件产品的功能和特点都有深入的研究,对于CleanMyMac这款产品也有深入了解。CleanMyMac是一款专为Mac用户设计的系统清理与优化软件,旨在帮助用户解决Mac电脑使用过程中的各种问题,让电脑恢复如新的状…

Linux系统中网络协议栈优化

在现代计算机网络中,网络协议栈是实现网络通信的核心组件之一。在Linux系统中,网络协议栈的优化对于提高网络性能、降低延迟、增强安全性等方面至关重要。本文将深入探讨Linux系统中网络协议栈的优化方法和技术,包括使用更快的网络协议栈和禁…

基于Arduino nano配置银燕电调

1 目的 配置电调,设置电机转动方向,使得CW电机朝顺时针方向转动,CCW电机朝逆时针转动。 2 步骤 硬件 Arduino nano板子及USB线变阻器银燕电调EMAX Bullet 20A朗宇电机 2205 2300KV格氏电池3S杜邦线若干接线端子 软件 BLHeliSuite 注意…

【LeetCode: 21. 合并两个有序链表 + 链表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Redis实现高可用持久化与性能管理

前言 在生产环境中,为了实现Redis的高可用性,可以采用持久化、主从复制、哨兵模式和 Cluster集群的方法确保数据的持久性和可靠性。这里首先介绍一下使用持久化实现服务器的高可用。主从复制、哨兵模式和集群介绍请参考:Redis主从复制、哨兵…

STL库 —— vector 的编写

一、成员变量 二、容量成员 2.1 size 函数 我们在定义私有成员时就会发现,其中 _finish 相当于 string 中的 size 的地址, _endofstorage 相当于 string 中的 capacity 的地址,所以 size 函数和 capacity 函数其实基本没有改变。 size_t s…

MIT6.828 Lab1 Xv6 and Unix utilities

2023MIT6.828 lab-1 官方地址 一、sleep 实验内容 调用sleep(系统调用)编写用户级别程序能暂停特定时常的系统滴答程序保存在user/sleep.c 实验过程 xv6的参数传递 查看官方文档提示的文件中,多采用如下定义: int main(in…

如何在nuxt中优雅使用swiper,实现过渡反向+贴合无缝+循环播放【核心代码分析】

视频效果 20240402-1723 图片效果 技术栈 Nuxt3 + Swiper11 Nuxt3 Nuxt: The Intuitive Vue Framework Nuxt Swiper11 Swiper - The Most Modern Mobile Touch Slider (swiperjs.com) 当然你也可以是使用nuxt-swiper Nuxt-Swiper GitHub - cpreston321/nuxt-swiper: Swi…