【系统架构设计(16)】软件架构设计二:软件架构风格:构建系统的设计模式与选择指南

文章目录

    • 一、核心思想
    • 二、数据流风格:以数据流动为核心的处理模式
    • 三、调用返回风格:基于程序调用的层次化组织
    • 四、独立构件风格:基于事件驱动的松耦合架构
    • 五、虚拟机风格:提供抽象执行环境的架构模式
    • 六、仓库风格:以数据为中心的协作模式
    • 七、控制风格与特殊架构:系统控制与组织的高级模式

一、核心思想

软件架构风格是构建复杂软件系统的设计模式库,它定义了描述系统的术语表和构建系统的规则。
在这里插入图片描述

为什么架构风格如此重要?

  1. 复杂软件系统的设计不能凭空想象,必须基于经过验证的设计模式。架构风格提供了经过实践检验的解决方案模板,帮助架构师在面对具体问题时能够快速选择合适的架构模式。
  2. 这些风格之间存在着演进关系:从数据流的顺序处理,到调用返回的层次化组织,再到独立构件的松耦合设计,每种风格都在解决特定的系统复杂性问题。
  3. 同时,架构风格不是孤立存在的。现代软件系统往往采用多种架构风格的组合:一个微服务系统可能在服务内部采用分层架构,服务间通过事件驱动通信,数据存储采用仓库风格

 

软件架构风格构成了现代软件设计的模式库和工具箱。从数据流动的管道过滤器,到层次化的调用返回,从事件驱动的独立构件,到数据中心的仓库模式,每种架构风格都在解决特定的设计问题。

重要的是,这些架构风格不是孤立存在的,现代复杂系统往往是多种架构风格的有机组合。理解各种架构风格的本质、优势和局限,掌握它们之间的关系和演进逻辑,是架构师进行系统设计的基本功。在实际项目中,架构师需要根据具体的业务需求、技术约束和质量属性要求,选择合适的架构风格组合,构建既满足功能需求又具有良好质量属性的软件系统。

 

二、数据流风格:以数据流动为核心的处理模式

数据流风格强调数据在系统中的流动和转换,适用于数据处理和转换场景。
在这里插入图片描述

子风格类型定义与特点典型应用场景核心优势与局限
批处理按顺序依次处理一批数据
数据按步骤依次处理
定期财务报表生成
大数据ETL处理
优势:处理大量数据效率高
局限:实时性差,灵活性低
管道-过滤器数据像管道中流动
经过一系列过滤器处理
传统编译器处理
网络报文处理
文本处理系统
优势:松耦合、可重用、支持并行
局限:交互性差、性能开销大

管道-过滤器的核心机制:每个过滤器都是独立的处理单元,只关注自身的数据转换逻辑,通过标准接口与其他过滤器连接。这种设计实现了高内聚低耦合,使得系统具有良好的可维护性和可扩展性。然而,由于每个过滤器都需要解析和合成数据,会带来性能开销。

 

三、调用返回风格:基于程序调用的层次化组织

调用返回风格通过函数或方法调用实现系统功能,是最常见的软件组织方式。
在这里插入图片描述

子风格类型定义与特点典型应用场景设计原则
主程序/子程序面向过程编程
主程序调用子程序完成功能
数值计算程序
简单业务处理系统
功能分解
模块化设计
面向对象以对象为核心
通过对象间方法调用交互
大型应用系统
游戏开发
封装、继承、多态
对象协作
分层架构系统按功能分层
上层调用下层服务
企业应用系统
网络协议栈
层次清晰
职责分离

在这里插入图片描述

分层架构的设计哲学:将复杂系统按功能抽象程度分为不同层次,每层都像一个虚拟机,为上层提供服务。这种设计使得系统具有良好的可维护性和可扩展性,但需要注意层次划分的合理性和层间耦合度的控制,过多的层次会影响系统效率。

 

四、独立构件风格:基于事件驱动的松耦合架构

独立构件风格通过事件机制实现构件间的间接通信,适用于需要高度灵活性的系统。
在这里插入图片描述

子风格类型定义与特点工作机制适用场景
进程通信不同进程通过通信机制协作
分布式环境下的多进程交互
进程间消息传递
共享内存通信
分布式系统
微服务架构
事件驱动系统系统响应事件触发操作
构件通过事件管理器交互
事件发布-订阅机制
异步消息处理
Web应用交互
物联网系统
实时响应系统

在这里插入图片描述

事件驱动的核心价值:事件源、事件、事件管理器和事件处理器构成了完整的事件处理链。这种架构实现了发布者和订阅者的解耦,使得系统具有良好的可扩展性。但同时也带来了控制流程难以预测、数据交换复杂等挑战。

 

五、虚拟机风格:提供抽象执行环境的架构模式

虚拟机风格通过模拟执行环境,为程序提供平台无关的运行基础。
在这里插入图片描述

子风格类型定义与特点核心机制典型应用
解释器直接解释执行代码或指令
不预编译成机器语言
解释器引擎、存储器
计算状态机
Python解释器
脚本语言执行
规则系统基于预定义规则处理数据
增加经验规则的解释器
知识库、规则解释器
工作内存
专家系统
人工智能决策系统

在这里插入图片描述

虚拟机的设计权衡:虚拟机风格的最大优势是可移植性,如Java的"一次编写,到处运行"。但这种抽象层会带来性能开销。解释器风格特别适合需要灵活定制规则的场景,而规则系统则更适合知识密集型的决策支持系统。
在这里插入图片描述
在这里插入图片描述

 

六、仓库风格:以数据为中心的协作模式

仓库风格将数据置于系统核心位置,多个构件围绕共享数据进行协作。
在这里插入图片描述

在这里插入图片描述

子风格类型定义与特点协作机制典型应用
数据库系统以数据库为核心管理数据
提供标准数据操作接口
CRUD操作
事务管理
企业信息管理系统
电商平台
黑板系统共享数据区支持多知识源协作
逐步求解复杂问题
知识源监测黑板
异步协作求解
语音识别
图像处理
专家诊断系统
超文本系统超文本形式组织信息
通过链接实现跳转
超链接导航
非线性信息组织
万维网
知识管理系统

在这里插入图片描述

黑板系统的协作智慧:黑板系统体现了一种分布式问题求解的智慧,不同的知识源基于共享的问题状态(黑板)进行协作,每个知识源都可以贡献自己的专业知识,最终形成问题的完整解决方案。

 

七、控制风格与特殊架构:系统控制与组织的高级模式

现代软件系统还采用一些特殊的控制和组织模式来应对复杂的系统需求。

架构模式定义与特点核心机制应用价值
闭环控制具有反馈机制的控制系统
能自动纠正偏差
反馈环节、比较器
自动调节控制量
嵌入式系统
自动控制系统
C2架构层次化的构件-连接件架构
遵循特定连接规则
构件顶底部连接
连接件中介通信
大型分布式系统
复杂集成应用
MDA模型驱动基于模型的软件开发方法
从抽象模型到具体实现
CIM→PIM→PSM→Code
模型自动转换
跨平台开发
大型企业应用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

模型驱动架构的发展趋势:MDA代表了软件开发的一个重要发展方向,通过提高抽象层次来应对系统复杂性。从计算无关模型到平台无关模型,再到平台相关模型,最终生成代码,这种分层抽象的思想正在现代软件开发中得到广泛应用。

 

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

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

相关文章

MySQL速记小册(1)

1【Q】:Mysql中的数据排序是怎么实现的?【A】:排序过程中如果字段有索引,则利用索引排序。反之使用文件排序。在文件排序中,如果数据量少则在内存中排序,使用单路排序或双路排序。如果数据量大则利于磁盘文…

20250904 10:45_排查10.1.3.35新QMS系统RMAN备份失败问题(优化脚本里的环境配置,增加了check_oracle_env 函数)

一、RMAN备份失败日志如下 [2025-09-04 04:00:01] 备份脚本启动 [2025-09-04 04:00:01] 开始 RMAN 备份 CDB: ORCLCDB Message file RMAN<lang>.msb not found Verify that ORACLE_HOME is set properly [2025-09-04 04:00:01] RMAN 备份失败! 二、原备份脚本存档…

Vue3源码reactivity响应式篇之EffectScope

概述 EffectScope是Vue3中一个响应式系统的辅助类&#xff0c;用于管理副作用&#xff08;effect&#xff09;的作用域。它可以帮助我们更好地组织和管理多个effect&#xff0c;便于一起停止或暂停以及恢复&#xff0c;避免了全局状态的污染和管理的复杂性。 每一个vue组件的实…

MySQL 日志全解析:Binlog/Redo/Undo 等 5 类关键日志的配置、作用与最佳实践

1 二进制日志&#xff08;Binlog&#xff09;&#xff1a;配置与核心作用 Binlog 是 MySQL 中跨存储引擎的核心日志&#xff0c;记录所有数据修改操作&#xff0c;主要用于主从复制、数据备份恢复与跨库迁移。 1.1 Binlog 核心操作 开启 Binlog 若需开启 Binlog&#xff0c;需在…

springboot 之 HTML与图片生成 (2)

前言 之前写了一篇html转图片的 文章&#xff0c;使用中文时会出现乱码情况&#xff0c;后来又从网上找了下信息&#xff0c;这篇主要介绍下另一个转换库。 依赖 <!-- 用于将html转图片--><dependency><groupId>gui.ava</groupId><artifactId>…

计算机组成原理:计算机的分类

&#x1f4cc;目录&#x1f5a5;️ 计算机组成原理&#xff1a;计算机的分类——从架构到应用的全景梳理一、按处理数据类型分类&#xff1a;从“数字”到“混合”的演进&#xff08;一&#xff09;数字计算机&#xff1a;离散数据的“精准管家”1. 核心原理2. 关键优势3. 典型…

数据结构——单向循环链表代码(补充)

在此前的文章中&#xff08;链接如下&#xff09;&#xff0c;只有单向链表的代码&#xff0c;接下来我们来写单向循环链表&#xff0c;并用其实现一个简单的学生信息链表https://blog.csdn.net/2301_80406299/article/details/151157051?spm1011.2415.3001.10575&sharefr…

【Python自动化】 21.2 Pandas 读取 Excel 时的 dtype 参数完全指南

一、dtype 参数概述 dtype 参数用于指定列的数据类型&#xff0c;在读取 Excel 时非常重要&#xff0c;可以&#xff1a; 提高内存效率避免自动类型推断错误确保数据一致性提升读取性能 二、基本用法 1. 基础语法 import pandas as pd# 指定列数据类型 df pd.read_excel(data.…

gtest全局套件的测试使用

gtest全局套件的测试使用 #include <iostream> #include "gtest/gtest.h" #include <unordered_map>class MyEnvironment: public testing::Environment {public:virtual void SetUp() override{std::cout<<"单元测试前的环境初始化&#xff…

【系统分析师】第7章-基础知识:软件工程(核心总结)

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 一、软件工程的基本概念 1.1 定义与意义 1.2 软件工程的基本原则 1.3 核心定义与边界 1.4 四大核心原则 1.5 三大核心目标 二、软件生命周期 2.1 定义与阶段划分 2.2 软件生命周期模型 三、软件开发方法 3.1 结构化方法…

量化基金从小白到大师 - 金融数据获取大全:从免费API到Tick级数据实战指南

量化基金从小白到大师 - 金融数据获取大全&#xff1a;从免费API到Tick级数据实战指南 各位&#xff0c;今天咱们要啃一块硬骨头——金融数据获取。别看这话题基础&#xff0c;它可是整个量化大厦的地基&#xff0c;地基不稳&#xff0c;再牛的策略都得塌房。我见过太多人&…

构建一个“会思考”的房地产数据获取脚本

—— 跨界思维&#xff1a;从认知自适应到房源信息监测 一、认知科学视角&#xff1a;什么是“会思考” 在心理学与认知科学中&#xff0c;所谓“会思考”&#xff0c;并不是指抽象的哲学推理&#xff0c;而是指个体能在复杂环境中不断调整行动策略。 比如&#xff0c;出行时如…

JavaScript的库简介

JavaScript拥有丰富的库生态系统,类似于Python的requests、numpy或C++的Boost。这些库分为两大类:前端库(如React、Vue)和后端/工具库(如Lodash、Axios)。以下是几个核心库的介绍与用法示例。 常用JavaScript库分类 前端UI库 React:Facebook开发的组件化库,用于构建用…

【无GGuF版本】如何在Colab下T4运行gpt-oss 20B

OpenAI发布了gpt-oss 120B和20B版本。这两个模型均采用Apache 2.0许可证。 特别说明的是&#xff0c;gpt-oss-20b专为低延迟及本地化/专业化场景设计&#xff08;210亿总参数&#xff0c;36亿活跃参数&#xff09;。 由于模型采用原生MXFP4量化训练&#xff0c;使得20B版本即…

LeetCode - LCR 179. 查找总价格为目标值的两个商品

题目 https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/submissions/660817798/ 思路 解法1是暴力解法&#xff0c;从第一个开始和后面的相加 暴力枚举慢就慢在&#xff0c;这个递增数组是排序好的数组&#xff0c;已经是有序的&#xff0c;暴力解法没有利用这…

UI自动化测试Python + Selenium + WinAppDriver( Windows 桌面应用)落地(一)环境搭建

最近公司要求为Windows 端桌面应用进行UI自动化测试,之前都是针对web端进行的UI自动化测试或者在早期使用的是QTP(Quick Test Professional)做PC端的UI自动化测试,而基于"经费"紧张,优先选择开源的工具,所以选择了selenium + WinAppDriver来实现。 首先,整理…

基于OpenCV的银行卡号识别系统:从原理到实现

引言在现代金融科技应用中&#xff0c;银行卡号的自动识别是一项重要技术。本文将详细介绍如何使用Python和OpenCV库构建一个完整的银行卡号识别系统。该系统能够从银行卡图像中提取卡号信息&#xff0c;并根据卡号首数字判断银行卡类型。技术栈​OpenCV: 计算机视觉库&#xf…

概率论第三讲——多维随机变量及其分布

文章目录考纲n维随机变量及其分布函数联合分布函数边缘分布函数二维离散型随机变量的概率分布、边缘分布和条件分布二维连续型随机变量的概率密度、边缘概率密度和条件概率密度常见的二位分布二维均匀分布二维正态分布随机变量的相互独立性概念相互独立的充要条件相互独立的性质…

纯软件实现电脑屏幕录制/存储到硬盘录像机/onvif模拟器/onvif虚拟监控/绿色版双击开箱即用

一、前言说明 在银行、超市、考试中心、工控系统、网课教学、居家办公等场景中&#xff0c;传统监控摄像头难以清晰录制电脑屏幕内容&#xff0c;导致关键操作无法有效追溯。为解决这一难题&#xff0c;我们推出了一套纯软件实现的电子屏幕监控方案&#xff0c;彻底取代依赖硬…

【算法--链表】86.分割链表--通俗讲解

一、题目是啥?一句话说清 给你一个链表和一个值 x,把链表分成两部分:所有小于 x 的节点都放在大于或等于 x 的节点之前,并且保持节点原来的相对顺序。 示例: 输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5](所有小于3的节点1、2、2都在大于等于3的节点4、3、5…