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

系统架构设计师—系统架构设计篇—软件架构风格

文章目录

  • 概述
  • 经典体系结构风格
    • 数据流风格
      • 批处理
      • 管道过滤器
      • 对比
    • 调用/返回风格
      • 主程序/子程序
      • 面向对象架构风格
      • 层次架构风格
    • 独立构件风格
      • 进程通信
      • 事件驱动的系统
    • 虚拟机风格
      • 解释器
      • 基于规则的系统
    • 仓库风格(数据共享风格)
      • 数据库系统
      • 黑板系统
      • 超文本系统
    • 闭环控制风格
    • C2风格
    • 二层C/S架构风格
    • 三层C/S架构风格
    • B/S架构

概述

软件体系结构(架构)风格是描述某一特定应用领域中系统组织方式的惯用模式

体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表一组约束

  • 词汇表:包含一些构件和连接件类型。
  • 约束:指出系统是如何将这些构件和连接件组合起来的。

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

经典体系结构风格

  • 数据流风格
    • 批处理
    • 管道过滤器
  • 调用/返回风格
    • 主程序/子程序
    • 面向对象风格
    • 层次结构风格
  • 独立构件风格
    • 进程通信
    • 事件驱动的系统
  • 虚拟机风格
    • 解释器
    • 基于规则的系统
  • 仓库风格(数据共享风格)
    • 数据库系统
    • 黑板系统
    • 超文本系统
  • 闭环控制风格
  • C2风格

数据流风格

批处理

  • 每一步处理都是独立的,并且每一步是顺序执行的。
  • 只有当前一步处理完成,后一步才能开始处理。
  • 数据必须是完整的,以整体的方式传递。
  • 如:日志分析、计费程序、数据仓库等。

管道过滤器

  • 每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
  • 这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。
  • 如传统的编译期、UNIX管道等。

对比

批处理管道过滤器
整体数据传送增量数据传送
构件粒度大构件粒度小
延迟高、实时性差实时性好
无并发可并发

调用/返回风格

主程序/子程序

  • 一般采用单线程控制。
  • 把问题划分成若干处理步骤,主程序的正确性取决于他调用的子程序的正确性。
  • 如开发语言。

面向对象架构风格

  • 数据的标识鄂它们的相应操作被封装起来,对象的行为体现在其接受和请求的动作中。
  • 对象具有封装性,一个对象的改变不会影响其他对象。
  • 如面向对象开发语言。

层次架构风格

  • 每一层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。
  • 在层次结构中,修改某一层,最多影响其相邻的上下两层(通常只能影响上层)。
  • 上层必须指导下层的身份,不能调整层次之间的顺序。
  • 如TCP/IP协议。

独立构件风格

主要特点:每个构件都是独立的个体,可以代表一切体现封装的“对象”。
例如:小到代码级的函数、类,大到一个服务端进程、集群、完整的系统。

进程通信

进程间消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用等。

事件驱动的系统

  • 当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。
  • 一个事件的触发就导致另一个模块中的过程调用。这是一种隐式调用的方式,优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便,其缺点是构件放弃了对系统计算的控制。
  • 如:断点调试、新闻、公众号等订阅信息。

虚拟机风格

当底层不支持上层时,在两者之间加入一层虚拟机做模拟仿真,消除硬件和软件之间的差异。

  • 解题技巧:自定义、灵活

解释器

  • 通常包括一个完成解释工作的解释引擎、一个包含将被解释代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行进度的数据结构。

  • 缺点是执行效率比较低。

  • 如JVM。

  • 解题技巧:游戏

基于规则的系统

  • 包括规则集、规则解释器、规则/数据选择器和工作内存。
  • 一般用在人工智能领域和
    决策支持系统(Decision-making Support System, DSS)中。

仓库风格(数据共享风格)

数据库系统

  • 构件分为中央共享数据源、独立处理单元。

  • 构件控制中央共享数据。

  • IDE集成开发环境注册表剪贴板

  • 一个或多个构件以主动触发的方式以调用顺序去更新共享数据存储区。

黑板系统

  • 包括知识源黑板控制三个部分。

  • 知识源:若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板。

  • 黑板:一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介。知识源响应是通过黑板状态的变化来控制的。

  • 黑板系统通常应用在对于解决问题没有确定性算法的软件中

  • 语音识别信号处理
    在这里插入图片描述

  • 与数据库系统相反,一个或多个构件由控制单元通知被动触发的方式以不确定的顺序去更新共享数据存储区。

  • 每个构件可能多次参与执行流程,但流程本身无法事先确定。

超文本系统

  • 静态网页
    在这里插入图片描述

  • 超文本系统中出现的构件以网状链接方式相互连接,用户可以在构件之间按照人类的思维方式任意跳转到相关构件。

闭环控制风格

闭环(过程)控制是将过程输出的指定属性维护在一个特定的参考值(设定值),将事务处理看成输入、加工、输出、反馈、再输入的一个持续的过程模型。
实例:空调的温度自动调节器(设定值是温度)、定速巡航系统(设定值是速度)。

闭环控制是根据控制对象输出反馈来进行校正的控制方式,它是在测定实际与计划发生偏差时,按定额或标准来进行纠正的。

  • 解题技巧:空调的温度调节系统、巡航系统,数据流转允许存在环路,循环过程。

C2风格

C2体系结构风格可以概括为通过连接件绑定在一起按照一组规则运作的并行构件风格。

C2风格中的系统组织规则如下:

  1. 系统中的构件和连接都有一个顶部和一个底部。
  2. 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部。而构件与构件之间的直接连接是不允许的
  3. 一个连接件可以和任意数目的其他构件和连接件连接。
  4. 当两个连接件进行直接连接时,必须由其中一个的底部连接到另一个的顶部

在这里插入图片描述

二层C/S架构风格

二层C/S架构为单一服务器且以局域网为中心,所以难以扩展至大型企业广域网或Internet;软、硬件的组合及集成能力有限。

它的缺点主要有:

  1. 服务器的负荷太重,难以管理大量的客户机,系统的性能容易变坏。
  2. 数据安全性不好。客户端可以直接访问服务器,那么客户端上其他程序也可想办法访问服务器,从而使服务器的安全性受到威胁。

三层C/S架构风格

与二层C/S架构相比,在三层C/S架构中,增加了一个应用服务器。可以将整个应用逻辑驻留在应用服务器上,而只有表示层存在于客户机上。这种客户机称为瘦客户机。

三层C/S架构将应用系统分成表示层、功能层、数据层三个部分。

层次功能
表示层用户接口,检查用户输入的数据,显示输出的数据。
功能层业务逻辑层,是将具体的业务处理逻辑编入程序中。
数据层对DBMS进行管理和控制。

与传统二层C/S架构相比,三层C/S架构具有以下优点:

  1. 允许合理地划分三层结构,使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能提高系统的可维护性和可扩展性。
  2. 允许更灵活、有效地选用相应的平台和硬件系统,使之在处理负荷能力与处理特性上分别适应于结构清晰的三层,并且这些平台和各个组成部分可以都具有良好的可升级性和开放性。
  3. 系统的各层可以并行开发,各层也可以选择最适合的开发语言,使之能并行且高效的开发,达到较高的性能价格比。对每一层的处理逻辑的开发和维护也会更容易些。
  4. 利用功能层可以有效地隔离表示层与数据层,未授权的用户难以绕过功能层去利用数据库工具或黑客手段非法的访问数据层,这就为严格的安全性奠定了坚实的基础。

B/S架构

  • B/S-浏览器/服务器(Browser/Server)架构是三层C/S架构的一种实现方式,其具体结构为“浏览器/Web服务器/数据库服务器”。
  • B/S架构利用WWW浏览器技术,结合浏览器的多种脚本语言,用通用浏览器就实现了原来需要复杂的专用软件才能实现的强大功能,并节约了开发成本。

http://www.kler.cn/a/579820.html

相关文章:

  • Docker—Docker环境安装部署
  • 第N5周:Pytorch文本分类入门
  • 题解:AT_arc093_b [ABC092D] Grid Components
  • 从HashMap到ConcurrentHashMap源码详解
  • Python Flask 和数据库系统交互
  • 蓝耘携手通义万相2.1:引领AI创作革新,重塑视觉体验
  • 非软件开发项目快速上手:14款管理软件精选
  • REST API前端请求和后端接收
  • Floyd求解最短路径问题
  • 洛谷 P3884 [JLOI2009] 二叉树问题
  • 力扣热题 100:图论专题经典题解析
  • 刷题统计 | 第十三届蓝桥杯省赛C++B组
  • 2019年蓝桥杯第十届CC++大学B组真题及代码
  • Golang学习笔记_48——中介者模式
  • LabVIEW基于双通道FFT共轭相乘的噪声抑制
  • ArcGIS 工程文件到 ArcGIS Pro 的无缝迁移:详细步骤与技巧
  • web安全概述(web漏洞解析与攻防实战)
  • Conda 生态系统:基础命令、安装对比及 Mamba 介绍
  • 两数之和 力扣1
  • npm终端执行时报错