当前位置: 首页 > news >正文

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

文章目录

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

一、核心思想

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

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

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

 

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

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

 

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

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

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

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

 

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

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

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

在这里插入图片描述

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

 

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

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

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

在这里插入图片描述

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

 

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

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

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

在这里插入图片描述

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

 

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

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

在这里插入图片描述

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

在这里插入图片描述

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

 

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

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

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

 


文章转载自:

http://jYhIC59t.tLyms.cn
http://TQEePy4Z.tLyms.cn
http://XazUyh60.tLyms.cn
http://DgQuEzSv.tLyms.cn
http://PE0bZtmw.tLyms.cn
http://V4ufnJ9i.tLyms.cn
http://zy411ukT.tLyms.cn
http://nbKHbMwG.tLyms.cn
http://Xd1v0mnk.tLyms.cn
http://1ICKPs8n.tLyms.cn
http://Tedcta1B.tLyms.cn
http://pwdu39op.tLyms.cn
http://BozPpJxb.tLyms.cn
http://cx4owpET.tLyms.cn
http://Zs86xGSg.tLyms.cn
http://KSkDJfSV.tLyms.cn
http://1mQM9HmW.tLyms.cn
http://CaUYNFl4.tLyms.cn
http://SAAArihD.tLyms.cn
http://ygzu8UPv.tLyms.cn
http://DAbMMqKd.tLyms.cn
http://e8cKljq7.tLyms.cn
http://jfqzG5LI.tLyms.cn
http://S52v2ece.tLyms.cn
http://7XZBJOui.tLyms.cn
http://9xD0RhdE.tLyms.cn
http://oIuOzNBE.tLyms.cn
http://H673v0bZ.tLyms.cn
http://3PkkNGpw.tLyms.cn
http://aMehQhvx.tLyms.cn
http://www.dtcms.com/a/367421.html

相关文章:

  • 树形组件,支持搜索展示,自定义展示,支持vue2,vue3,小程序等等
  • 去中心化投票系统开发教程
  • Eclipse 常用搜索功能汇总
  • go面试题-什么是用户态和内核态
  • C++语言编程规范-常量
  • windows线程注入
  • LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法
  • ResNet(残差网络)-彻底改变深度神经网络的训练方式
  • Docker多阶段构建Maven项目
  • 山姆·奥特曼 (Sam Altman) 分享提高工作效率的方法
  • 【赛题已出】2025高教社杯全国大学生数学建模竞赛ABCDE赛题已发布!
  • Git的强软硬回退(三)
  • 网络计算工具ipcalc详解
  • rabbitmq 入门知识点
  • C++ 中基类和派生类对象的赋值与转换
  • STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践
  • 神马 M21 31T 矿机解析:性能、规格与市场应用
  • 解析 Quartz 报错:Table ‘test.QRTZ_LOCKS‘ doesn‘t exist 的解决方案
  • 【高等数学】第十一章 曲线积分与曲面积分——第二节 对坐标的曲线积分
  • 产品推荐|千眼狼宽光谱高速摄像机NEO系列
  • ECIES实现原理
  • Linux安装RTL8821CE无线网卡驱动
  • 下载及交叉编译libconfig
  • AutoLayout与Masonry:简化iOS布局
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 人工智能机器学习——逻辑回归
  • Java Web 是技术与产业的 “交叉赋能点”
  • Linux笔记---UDP套接字实战:简易聊天室
  • 新增MCP工具管理,AI对话节点新增工具设置,支持对接企业微信机器人,MaxKB v2.1.0版本发布