系统架构设计基础

1. 软件架构的概念

     软件架构,即软件体系结构,为软件系统提供一个结构、行为和属性的高级抽象。

     软件架构作用:

        1)项目干系人进行交流的手段

        2)可传递和复用的模型,通过研究软件架构可预测软件的质量

       3)使推理和控制的更改更加简单,有助于循序渐进的原型设计

    

阶段作用和意义
需求分析阶段

软件需求模型到软件架构模型转换关注的问题:

1. 如何根据需求模型构建软件架构模型(SA模型)

2. 保证模型转换的可追踪性

设计阶段

软件架构研究关注的最早和最多的阶段。

ADL、4+1视图

实现阶段
构件组装阶段可复用构建组装设计能够提高系统实现的效率
部署阶段软件架构为部署提供高层架构指导
后开发阶段维护、演化、复用

     架构描述语言ADL

     形式化语言,在底层语义模型的支持下,为系统软件的概念体系结构建模提供了具体语法和概念框架(如Aesop,MetaH,C2,Rapide,SADL,Unicon)

    ADL的三个基本元素:

    构件、连接件、架构配置

    4+1视图:

视图视角描述
逻辑视图(Logical View)最终用户(功能需求)类与对象
实现/开发视图(Implementation View)程序员配置、装配
进程视图(Process View)系统集成人员性能、可伸缩、吞吐率、并发
部署/物理视图(Deployment View)系统工程人员发布、安装、拓扑结构
用例视图/场景(use-case View)分析/测试人员

2. 基于架构的软件开发

      基于架构的软件开发(ABSD)是架构驱动的,强调由业务【商业】、质量和功能需求的组合驱动架构设计。

     ABSD基础:功能分解、通过选择架构风格来实现质量和业务需求、软件模板的使用

    视角和视图(描述软件架构)

    用例用来捕获功能需求特定场景【刺激、环境、响应】用来捕获质量需求

    开发过程:ABSD能很好的支持软件重用,是一个自顶向下、递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类

    

     1)体系结构需求:需求评审的重点是需求是否真实的反映了客户的要求,组的分类是否合理,构件合并是否合理等

   2)体系结构设计:设计评审必须邀请独立于系统开发的外部人员

   

  3) 体系结构文档化:主要输出是架构规格说明 和 测试架构需求的质量设计说明书 两个文档

   软件架构成功的关键因素:文档的完整性和质量

   文档的注意事项:文档要从使用者的角度进行编写、必须分发给所有与系统有关的开发人员、必须保证开发者手上的文档是最新的

 4) 体系结构复审:标识潜在的风险,及早发现架构设计中的缺陷和错误

 5)体系结构实现:体系结构说明书中定义了系统中构件与构件间的关系。测试包括单个构件的功能性测试及被组装应用的整体功能和性能测试。

      

   6)体系结构演化

        

3. 软件架构风格

     软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束

五大架构风格子风格
数据流风格【Data Flow】批处理【Batch Sequential】、管道-过滤器【Pipes and Filters】
独立/返回风格【Call/Return】主程序/子程序【Main Program and Subroutine】、面向对象【Object-oriented】、分层架构【Layered System】
独立构件风格【Independent Components】进程通信【Communicating Progress】、事件驱动系统(隐式调用)【Event System】
虚拟机风格【Virtual Machine】解释器【interpreter】、规则系统【Rule-based System】
以数据为中心【Data-centered】数据库系统【Database System】、黑板系统【Blackboard System】、超文本系统【Hypertext System】

  1) 数据流风格

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

     优点:松耦合【高内聚-低耦合】,良好的重用性/可维护性,可扩展性【标准接口适配】,良好的隐蔽性,支持并行

     缺点:交互性较差,复杂性较高,性能较差(每个过滤器都需要解析和合成数据)

    典型实例:传统编译器、网络报文处理

    批处理:大量整体数据,无需用户交互

    管道-过滤器:流式数据、弱用户交互

   2)调用/返回风格

        主程序/子程序:面向过程

        面向对象:对象的方法调用

        分层:层与层之间的方法调用

               分层架构优点:1. 良好的重用性(只要接口不变可用在其他处);2. 可维护性好;3. 可扩展性好,支持递增设计

              分层架构缺点:1. 并不是每个系统都方便分层;2. 很难找到一个正确的、合适的分层方法;3. 不同层次之间耦合度高的系统很难实现

             分层架构特点:1. 各个层次的组件形成不同功能级别的虚拟机;2. 多层相互协同工作,而且实现透明

   3)独立构件风格

        优点:1. 松耦合;2. 良好的重用性/可修改性/可扩展性

        缺点:1. 构件放弃了对系统计算的控制;2. 数据交换的问题;3. 过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理存在问题

       特点:系统由若干子系统构成且成为一个整体;系统有统一的目标;子系统有主从之分;每一子系统有自己的事件收集和处理机制

   4)虚拟机风格

子分类优点缺点特点适合领域
解释器可以灵活应对自定义场景复杂度较高适用于需要“自定义规则”的场合
规则为中心在解释器的基础上增加经验规则使用于专家系统

       基于规则的系统构成:规则集、规则解释器、规则/数据选择 及 工作内存,一般用在人工智能领域和DSS(决策支持系统)中。

4. 特定领域软件架构

5. 软件产品线

6. 构件与中间件技术

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

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

相关文章

OSI 参考模型和 TCP/IP 参考模型

数据通信是很复杂的,很难在一个协议中完成所有功能。因此在制定协议时经常采用的思路是将复杂的数据通信功能由若干协议分别完成,然后将这些协议按照一定的方式组织起来。最典型的是采用分层的方式来组织协议,每一层都有一套清晰明确的功能和…

揭秘区块链隐私黑科技:零知识证明如何改变未来

文章目录 1. 引言:什么是零知识证明?2. 零知识证明的核心概念与三大属性2.1 完备性(Completeness)2.2 可靠性(Soundness)2.3 零知识性(Zero-Knowledge) 3. 零知识证明的工作原理4. 零…

解锁机器学习核心算法 | 线性回归:机器学习的基石

在机器学习的众多算法中,线性回归宛如一块基石,看似质朴无华,却稳稳支撑起诸多复杂模型的架构。它是我们初涉机器学习领域时便会邂逅的算法之一,其原理与应用广泛渗透于各个领域。无论是预测房价走势、剖析股票市场波动&#xff0…

Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件

步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中&#xf…

ShenNiusModularity项目源码学习(9:项目结构)

ShenNiusModularity源码主要有11个project(其实还有officialweb、test两个文件夹,大致有4、5个project,但看着跟主要项目代码没太大关系,暂时不管),这11个project的依赖关系如下图所示,其中最下…

Rook-ceph(1.92最新版)

安装前准备 #确认安装lvm2 yum install lvm2 -y #启用rbd模块 modprobe rbd cat > /etc/rc.sysinit << EOF #!/bin/bash for file in /etc/sysconfig/modules/*.modules do[ -x \$file ] && \$file done EOF cat > /etc/sysconfig/modules/rbd.modules &l…

力扣 66.加一 (Java实现)

题目分析 给定一个数组&#xff0c;可以组成一个数字&#xff0c;将数字加一后&#xff0c;返回新数组 思路分析 首先跟着题目思路走&#xff0c;将数组按位*10可以得到数字&#xff0c;再加一&#xff0c;加一后按位%10&#xff0c;可以得到新的数组。但是此处数字会过大&…

vue3-03初学vue3中的配置项setup(Composition API (组合API组件中所用到的:数据、方法等,均要配置在setup中)

1.关于setup Vue3.0中一个新的配置项&#xff0c;值为一个函数.setup是所有Composition API (组合API)“表演的舞台”m组件中所用到的:数据、方法等等&#xff0c;均要配置在setup中。 2..setup函数使用 setup函数的两种返回值 1.若返回一个对象&#xff0c;则对象中的属性、…

docker 安装的open-webui链接ollama出现网络错误

# 故事背景 部署完ollama以后&#xff0c;使用谷歌浏览器的插件Page Assist - 本地 AI 模型的 Web UI 可以比较流畅的使用DeepSeek&#xff0c;但是只局限于个人使用&#xff0c;想分享给更多的小伙伴使用&#xff0c;于是打算使用open-webui 来管理用户&#xff0c;经官网推荐…

【进阶】Java设计模式详解

java注解 什么是注解&#xff1f; java中注解(Annotation)&#xff0c;又称java标注&#xff0c;是一种特殊的注释。 可以添加在包&#xff0c;类&#xff0c;成员变量&#xff0c;方法&#xff0c;参数等内容上面&#xff0c;注解会随同代码被编译到字节码文件中&#xff0…

观望=没有!

“兄弟&#xff0c;Java现在学还有前途吗&#xff1f;”“前端是不是饱和了&#xff1f;”——每天打开私信&#xff0c;这类问题能占大半。我的回复永远只有一句&#xff1a; “如果你非要等我说‘行’才敢行动&#xff0c;那答案已经不重要了。” # 技术人总在纠结“能不能”…

百度搜索融合 DeepSeek 满血版,开启智能搜索新篇

百度搜索融合 DeepSeek 满血版&#xff0c;开启智能搜索新篇 &#x1f680; &#x1f539; 一、百度搜索全量接入 DeepSeek &#x1f539; 百度搜索迎来重要升级&#xff0c;DeepSeek 满血版全面上线&#xff01;&#x1f389; 用户在百度 APP 搜索后&#xff0c;点击「AI」即…

【MySQL系列文章】Linux环境下安装部署MySQL

前言 本次安装部署主要针对Linux环境进行安装部署操作,系统位数64 getconf LONG_BIT 64MySQL版本&#xff1a;v5.7.38 一、下载MySQL MySQL下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 二、上传MySQL压缩包到Linuxx环境&#xff0c…

RedisTemplate存储含有特殊字符解决

ERROR信息: 案发时间: 2025-02-18 01:01 案发现场: UserServiceImpl.java 嫌疑人: stringRedisTemplate.opsForValue().set(SystemConstants.LOGIN_CODE_PREFIX phone, code, Duration.ofMinutes(3L)); // 3分钟过期作案动机: stringRedisTemplate继承了Redistemplate 使用的…

C++--STL库-List

目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库&#xff08;STL&#xff09;中的双向链表容器&#xff0c;属于<list>头文件。 它的特点是&#xff1a; 动态大小&#xff1a;可以随时插入…

C语言——深入理解指针(3)

文章目录 字符指针变量数组指针变量数组指针变量是什么&#xff1f;数组指针变量怎么初始化 二维数组传参的本质函数指针变量函数指针变量的创建函数指针变量的使用两段关于函数的有趣代码typedef关键字 函数指针数组转移表第一种写法&#xff1a;第二种写法&#xff08;函数指…

mybatis使用typeHandler实现类型转换

使用mybatis作为操作数据库的orm框架&#xff0c;操作基本数据类型时可以通过内置的类型处理器完成java数据类型和数据库类型的转换&#xff0c;但是对于扩展的数据类型要实现与数据库类型的转换就需要自定义类型转换器完成&#xff0c;比如某个实体类型存储到数据库&#xff0…

基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频

运行环境 jdkmysqlIntelliJ IDEAmaven3微信开发者工具 项目技术SpringBoothtmlcssjsjqueryvue2uni-app 宿舍报修小程序是一个集中管理宿舍维修请求的在线平台&#xff0c;为学生、维修人员和管理员提供了一个便捷、高效的交互界面。以下是关于这些功能的简单介绍&#xff1a; …

STM32 HAL库 UART串口发送数据实验

一、实验目标 通过STM32的UART串口发送字符串数据到PC端串口调试助手&#xff0c;验证通信功能。 二、硬件准备 主控芯片&#xff1a;STM32F103C8T6。 串口模块&#xff1a;USB转TTL模块。 接线说明&#xff1a; STM32的USART1_TX&#xff08;PA9&#xff09; → USB-TTL模…

一.AI大模型开发-初识机器学习

机器学习基本概念 前言 本文主要介绍了深度学习基础&#xff0c;包括机器学习、深度学习的概念&#xff0c;机器学习的两种典型任务分类任务和回归任务&#xff0c;机器学习中的基础名词解释以及模型训练的基本流程等。 一.认识机器学习 1.人工智能和机器学习 人工智能&am…