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

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.mzph.cn/news/798066.shtml

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

相关文章

番茄 短abogus补环境

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章…

端到端单倍型参考基因组揭示了三倍体香芽蕉型香蕉亚基因组的分歧和疾病抵抗力-文献精读-5

T2T基因组文献分享Telomere-to-telomere haplotype-resolved reference genome reveals subgenome divergence and disease resistance in triploid Cavendish banana 三倍体植物基因组的文献,各位同仁还有什么有特色的基因组评论区留言~ 摘要 香蕉是世界上最重要…

JavaEE——手把手教你实现简单的 servlet 项目

文章目录 一、什么是 Servlet二、创建一个简单的 Servlet 程序1. 创建项目2.引入依赖3. 创建目录4.编写代码5. 打包程序6. 部署7.验证整体过程总结 三、使用 Smart Tomcat 插件简化项目创建四、创建项目时可能遇到的几个问题。 一、什么是 Servlet Servlet 是一种实现 动态页面…

12、最小覆盖子串

如何想到这个解法 问题的特点: 首先,认识到这是一个关于子串的问题,而且需要考虑子串的最小长度。这提示我们可能需要使用一种方式来逐步探索不同的子串。滑动窗口的适用性:滑动窗口是处理子串问题的常用技巧,特别是当…

【图像分割】nnUnetV1与V2的Linux部署与应用命令

以前觉得麻烦,一直没用过nnunet,虽然知道它很火,最近一个契机,部署使用了一下nnunet,记录一下其部署和使用的方法与命令。 1、部署 首先,我有一个环境,这个环境可以是以前就有的,也可…

1.c++入门(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)

1.c的第一个程序 // 方法一 #include<iostream>// namespace为命名空间的关键字&#xff0c;std为空间名&#xff1b; C标准库的东西放进std命名空间 using namespace std; int main() {cout << "hello world" << endl;return 0; }// 方法二 #in…

YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【leetCode】2810. 故障键盘

文章目录 [2810. 故障键盘](https://leetcode.cn/problems/faulty-keyboard/)思路一&#xff1a;模拟代码&#xff1a;思路二&#xff1a;双端队列代码&#xff1a; 2810. 故障键盘 思路一&#xff1a;模拟 用StringBuilder来拼贴字符遍历字符串&#xff0c;如果遇到i,对拼贴好…

注解,自定义注解和元注解

1.注解 1.1.注解概述、作用 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0…

《深入浅出多模态》:多模态经典模型CLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

逆向案例14——cnki学术翻译AES加密分析,涉及保持会话和获取token值

python代码&#xff1a; import execjs import requests UA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" token_url "https://dict.cnki.net/fyzs-front-api/getToken" url …

图像分割-RSPrompter

文章目录 前言1. 自动化提示器1.1 多尺度特征增强器1.2 RSPrompterAnchor-based PrompterQuery-based Prompter 2. SAM的扩展3. 结果WHU数据集NWPU数据集SSDD数据集 前言 《RSPrompter: Learning to prompt for remote sensing instance segmentation based on visual foundati…

一文读懂Memory consistency model (内存模型)

Memory consistency model又称Memory model (内存模型)&#xff0c;定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。Memory model定义了软硬件接口规范&#xff0c;以便程序员预料硬件会有什么行为&#xff0c;而硬件实现者知道可以使用什么样…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

OpenCV4.9处理平滑图像

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用OpenCV4.9的随机生成器和文本 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何使用 OpenCV …

助力瓷砖生产智造,基于YOLOv5全系列参数【n/s/m/l/x】模型开发构建瓷砖生产制造场景下1280尺寸瓷砖表面瑕疵检测识别系统

砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光&#xff0c;最后进行质量检测和包装。得益于产业自动化的发展&#xff0c;目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说&#xff0c;一条产线需要配数名质检工&#…

【三十三】【算法分析与设计】回溯(1),46. 全排列,78. 子集,没有树结构,但是依旧模拟树结构,回溯,利用全局变量+递归函数模拟树结构

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1&#xff0c;2&#xff0c;3] 输出&#xff1a;[[1&#xff0c;2&#xff0c;3]&#xff0c;[1&#xff0c;3&a…

缺陷检测项目 | 使用OpenCV实现纺织品表面缺陷检测

项目应用场景 面向纺织品表面缺陷检测场景&#xff0c;使用 OpenCV 来实现&#xff0c;因此无需深度学习复杂的训练流程&#xff0c;实现起来会更加便捷。 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md 项目采用 VisualStudio C# 开发&#xff0c;所以用 Visua…

AcWing---转圈游戏---快速幂

太久没写快速幂了... 这是一道数学题orz&#xff0c;能看出来的话答案就是 &#xff0c;但是很大&#xff0c;同时还要mod n&#xff0c;直接用快速幂即可。 快速幂模版&#xff1a; long long int power(long long int a,long long int b,long long int mod){long long int r…