系统架构设计师——架构风格

概述

软件体系结构风格是指在软件架构设计中,针对特定应用领域所采用的一套惯用模式,这些模式定义了系统的组织方式。以下是对软件体系结构风格的详细解析:

1. 体系结构风格的概念

  • 目的:简化设计过程,提高设计的重用性和可维护性。
  • 特点:每种风格都有其特定的适用范围和优势,适用于不同的应用场景和需求。

2. 词汇表

  • 构件:系统中的基本功能单元,如客户端、服务器、数据库等。
  • 连接件:用于构件间交互的桥梁,如管道、总线、过滤器等。

3. 约束

  • 组合方式:指导如何将构件和连接件组合成一个完整的系统。
  • 交互规则:定义构件间如何通信,以及数据如何流动。

4. 体系结构风格的作用

  • 反映共有特性:体现了特定领域中多个系统共有的结构和语义特性。
  • 设计指导:提供一套指导原则,帮助设计者有效地组织模块和子系统,形成完整的系统。

经典架构风格

数据流风格

数据流风格主要包括批处理和管道过滤器两种模式。这两种风格在数据处理和应用实施方面有各自的特点和适用场景。以下是具体分析:

批处理

  1. 基本特点
    • 批处理是一种数据处理方式,它将任务分成一系列固定顺序的计算单元,这些单元通常作为独立的程序存在。
    • 每个组件必须完成对整批数据的处理并输出结果,下一个组件才能开始进行处理。
    • 批处理的数据传送在步与步之间作为一个整体,数据必须是完整的且以整体的方式传递。
  2. 典型应用
    • 经典的数据处理,如大批量数据的定期处理,例如薪资结算、账单生成等。
    • 传统的程序编译,CASE(computer aided software engineering)工具也是批处理的典型例子。
  3. 优缺点
    • 优点包括结构简单、易于理解和实现;适合于大批量、高潜伏性的任务;可以利用批处理减少系统资源的占用和等待时间。
    • 缺点是缺乏灵活性,不适合需要即时响应的应用;如果批处理中的某个步骤失败,可能导致整个批次的处理失败或回退。

管道过滤器

  1. 基本特点
    • 管道过滤器风格允许数据在处理单元之间流动时,每个处理单元(过滤器)可以独立地、并行地处理流经它的数据。
    • 数据通过管道从一个过滤器传输到另一个过滤器,支持并发处理,适合流数据处理和实时数据处理场景。
    • 过滤器必须是独立的实体,不与其他过滤器共享数据,保证系统的独立性和可维护性。
  2. 典型应用
    • UNIX shell编写的程序,通过管道连接各组成部分,实现进程间的通信和数据传输。
    • 传统的编译器架构,包括词法分析、语法分析、语义分析和代码生成等阶段,每个阶段的输出作为下一个阶段的输入。
  3. 优缺点
    • 优点是支持软件重用,新的过滤器可以添加到现有系统中以提高性能;系统维护简单,每个过滤器可以独立开发和测试。
    • 缺点是可能导致进程成为批处理的结构,因为虽然过滤器可以增量式地处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。

调用/返回风格

调用/返回风格是软件架构中一种重要的设计模式,主要包括主程序/子程序风格、面向对象风格和层次结构风格。以下是对这三种风格的详细解析:

  1. 主程序/子程序风格
    • 基本特点:这种风格采用单线程控制,将问题划分为若干处理步骤,其中构件分为主程序和子程序。子程序通常可以合成为模块,并通过过程调用进行交互。
    • 典型应用:早期的结构化程序设计多采用这种风格,适用于相对简单的任务分解和功能实现。
    • 优缺点:优点是结构简单、易于理解和实现;缺点是可重用性差,数据安全性低,并且随着规模的扩大,维护难度增加。
  2. 面向对象风格
    • 基本特点:建立在数据抽象和面向对象的基础上,数据的表示和其操作封装在对象中。对象负责维护其表示的完整性,并隐藏具体实现。
    • 典型应用:广泛应用于需要高度数据封装和复用的系统设计,如图形用户界面、系统仿真等。
    • 优缺点:优点是提高了软件的复用性和可维护性,更贴近现实模型;缺点是需要管理大量对象,且继承机制可能增加复杂度。
  3. 层次结构风格
    • 基本特点:系统组织成一个层次结构,每一层为上层服务,同时作为下层的客户。层与层之间通过定义良好的接口进行交互,内部实现对其他层隐蔽。
    • 典型应用:分层通信协议是层次结构风格的典型例子,如ISO七层模型。
    • 优缺点:优点是支持复杂问题的逐步分解和抽象,每一层可以独立修改而不影响其他层;缺点是难以找到合适的层次抽象,且性能考虑可能要求跨层设计。

独立构件风格

1. 进程通信

  • 基本特点:在进程通信风格中,每个构件都是一个独立的进程,它们通过进程间通信机制进行交互。
  • 交互方式:进程之间可以通过消息传递、信号、共享内存等方式进行通信。
  • 适用场景:适用于需要高度模块化和并行处理的系统,例如多任务操作系统、分布式计算系统等。
  • 优点:提高了系统的并发性和容错性,因为每个进程独立运行,一个进程的故障不会影响到其他进程。
  • 缺点:进程间通信的开销较大,可能导致性能下降;同时,数据一致性和同步也更难以管理。

2. 事件驱动的系统

  • 基本特点:事件驱动系统的核心是事件队列和事件处理器。系统响应外部或内部发生的事件,并触发相应的事件处理器。
  • 交互方式:构件之间不直接通信,而是通过事件队列进行间接通信。构件生成事件并放入队列,其他构件根据事件类型选择处理或响应。
  • 适用场景:适用于需要高度响应性的系统,如用户界面、实时系统、网络服务器等。
  • 优点:提高了系统的响应速度和可扩展性,因为可以灵活地添加或修改事件处理器。
  • 缺点:事件驱动的设计和管理复杂,可能导致系统难以理解和维护;另外,频繁的事件处理可能导致性能问题。

虚拟机风格

解释器

  • 基本特点:解释器是一种程序,它按照特定的语言规范对源代码进行逐行翻译和执行,通常不生成目标代码。
  • 实现方式:解释器逐个解释并立即执行源程序中的语句,通常用于脚本语言和动态编程语言。
  • 适用场景:适用于需要即时执行代码且无需关心执行效率的场景,如快速原型开发、动态语言执行等。
  • 优点:开发速度快,可以即时看到修改效果;易于调试,因为可以逐个语句跟踪执行过程。
  • 缺点:执行效率相对较低,因为每次执行都需要重新解释代码;对资源的消耗较大。

基于规则的系统

  • 基本特点:基于规则的系统使用一组规则或规则集来处理输入数据,生成相应的输出。这些规则定义了特定的操作,当满足某些条件时执行。
  • 实现方式:系统根据预先定义的规则对输入数据进行分析和处理,然后触发相应的动作或产生输出。
  • 适用场景:适用于决策支持系统、专家系统、自动化推理等领域,如金融风险评估、医疗诊断等。
  • 优点:便于模拟人类专家的决策过程,易于添加和修改规则以适应变化;规则独立于数据和执行逻辑,提高了系统的灵活性。
  • 缺点:对于复杂的规则集合,系统可能变得难以维护和理解;性能可能受限于规则匹配的效率。

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

1. 数据库系统

  • 基本特点:数据库系统是一种用于存储、管理和检索数据的系统,它支持数据的持久化和事务处理。
  • 实现方式:数据库系统使用表格、索引、查询语言等工具来组织和访问数据,通常包括关系型数据库和非关系型数据库。
  • 适用场景:适用于需要可靠数据存储和高效数据检索的应用,如企业信息管理、金融数据处理等。
  • 优点:提供了强大的数据一致性保证和并发控制机制;支持复杂的查询和数据分析。
  • 缺点:对于非结构化数据的处理可能不够灵活;性能可能受限于数据库设计和索引优化。

2. 黑板系统

  • 基本特点:黑板系统是一种基于事件驱动的协作解决问题的模型,它使用一个称为“黑板”的共享数据结构来记录问题解决过程中的信息。
  • 实现方式:系统中的多个模块(知识源)根据黑板上的数据独立操作,更新黑板上的信息,共同推进问题的解决。
  • 适用场景:适用于需要多方面知识和协同工作的问题解决,如专家系统、自然语言处理等。
  • 优点:支持模块化和并行处理;便于集成不同的知识源和解决问题的策略。
  • 缺点:随着问题的复杂性增加,黑板的管理和维护难度增大;性能可能受限于知识源之间的协调和同步。

3. 超文本系统

  • 基本特点:超文本系统是一种非线性的信息组织和检索系统,它通过链接将文本片段(节点)连接起来,形成网状结构。
  • 实现方式:用户可以通过点击链接在相关文档或信息之间导航,系统提供界面和工具支持这种导航和信息的交互。
  • 适用场景:适用于信息浏览、教育和在线参考等应用,如网页浏览器、在线百科全书等。
  • 优点:提供了直观和灵活的信息浏览方式;支持多媒体和跨平台的内容展示。
  • 缺点:信息的组织结构和管理可能变得复杂;导航和搜索的效率取决于链接的设计和可用性。

闭环控制

  • 基本特点:闭环控制是一种控制系统,它通过反馈机制来调节系统的输出,以保持输出的稳定性和准确性。
  • 实现方式:系统通常包括传感器、控制器和执行器三个主要部分。传感器检测系统的当前状态,控制器根据目标状态和当前状态的差异生成控制信号,执行器则根据控制信号调整系统的状态。
  • 适用场景:适用于需要精确控制的应用,如自动化制造、温度控制、自动驾驶等。
  • 优点:提高了系统的稳定性和可靠性;能够适应外部环境的变化。
  • 缺点:设计和实现复杂,需要精确的数学模型和控制算法;对硬件的要求较高。

C2风格

  • 基本特点:C2(Component-Controller)风格是一种基于组件和控制器分离的架构风格,它强调组件之间的松耦合和控制器的集中管理。
  • 实现方式:系统由独立的组件和控制器组成,组件负责具体的业务逻辑,而控制器负责组件之间的协调和通信。
  • 适用场景:适用于需要高度模块化和可扩展性的应用,如大型软件开发、企业应用等。
  • 优点:支持组件的重用和系统的灵活配置;便于实现复杂的业务流程。
  • 缺点:控制器可能成为性能瓶颈;组件之间的依赖管理可能变得复杂。

C/S结构与B/S结构

  • 基本特点:C/S(Client/Server)结构和B/S(Browser/Server)结构是两种常见的网络应用架构。
  • 实现方式:C/S结构中,客户端和服务器分别承担用户界面和数据处理的职责;B/S结构中,浏览器作为通用客户端,服务器承担数据处理和应用逻辑。
  • 适用场景:C/S结构适用于性能要求高、交互复杂的应用,如数据库管理、图形编辑软件等;B/S结构适用于跨平台、易部署的应用,如网站、在线服务等。
  • 优点:C/S结构提供了更好的性能和用户体验;B/S结构则提供了更好的兼容性和可访问性。
  • 缺点:C/S结构的维护成本较高,需要为不同平台开发和维护多个版本;B/S结构的性能和交互受限于浏览器的能力。
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴代庄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值