【软考 系统架构设计师】案例分析④ 软件架构风格

发布于:2022-08-09 ⋅ 阅读:(544) ⋅ 点赞:(0)

>>回到总目录<<


软件架构风格

软件架构风格是特定应用领域的惯用模式,定义了用于描述系统的术语表和一组指导构建系统的规则

软件架构风格一般被分为以下五大架构风格:

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

各个风格表面上看是独立,但是实际应用过程中是结构多个风格一起使用的。

案例分析练习题

问题

某软件公司为其新推出的字处理软件设计了一种脚本语言,专门用于开发该字处理软件的附加功能插件。为了提高该语言的编程效率,公司组织软件工具开发部门为脚本语言研制一套集成开发环境。软件工具开发部门根据字处理软件的特点,对集成开发环境进行了需求分析,总结出以下3项核心需求:

  1. 集成开发环境需要提供对脚本语言的编辑、语法检查、解释、执行和调试等功能的支持,并要实现各种功能的灵活组合、配置与替换。
  2. 集成开发环境需要提供一组可视化的编程界面,用户通过对界面元素拖曳和代码填充的方式就可以完成功能插件核心业务流程的编写与组织。
  3. 在代码调试功能方面,集成开发环境需要实现在脚本语言编辑界面中的代码自动定位功能。具体来说,在调试过程中,编辑界面需要响应调试断点命中事件,并自动跳转到当前断点处所对应的代码。

针对上述需求,软件工具开发部门对集成开发环境的架构进行分析与设计,王工认为该集成开发环境应该采用管道-过滤器的架构风格实现,李工则认为该集成开发环境应该采用以数据存储为中心的架构风格来实现。

公司组织专家对王工和李工的方案进行了评审,最终采用了李工的方案。

【问题1】
请用200字以内的文字解释什么是软件架构风格,并从集成开发环境与用户的交互方式、集成开发环境的扩展性、集成开发环境的数据管理三个方面说明为什么最终采用了李工的设计方案。

【问题2】
在对软件系统架构进行设计时,要对架构需求进行分析,针对特定需求选择最为合适的架构风格,因此实际的软件系统通常会混合多种软件架构风格。请对核心需求进行分析,说明为了满足需求(2)和(3),分别应采用何种架构风格,并概要说明采用相应架构风格后的架构设计过程。

请思考片刻…
.
.
.

.
.
.

参考答案

问题1:

软件架构风格是指描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。

从集成开发环境与用户的交互方式看,用户通常采用交互式的方式对脚本语言进行编辑、解释执行与调试。在这种情况下,采用以数据存储为中心的架构风格能够很好地支持交互式数据处理,而管道-过滤器架构风格则对用户的交互式数据处理支持有限。

从集成开发环境的扩展性来看,系统核心需求要求实现各种编辑、语法检查、解释执行等多种功能的灵活组织、配置与替换。在这种情况下,采用以数据存储为中心的架构风格,以数据格式解耦各种功能之间的依赖关系,并可以灵活定义功能之间的逻辑顺序。管道-过滤器架构风格同样以数据格式解耦数据处理过程之间的依赖关系,但其在数据处理逻辑关系的灵活定义方面较差。

从集成开发环境的数据管理来看,集成开发环境需要支持脚本语言、语法树(用于检查语法错误)、可视化模型、调试信息等多种数据类型,并需要支持数据格式的转换。以数据存储为中心的架构将数据存储在统一的中心存储器中,中心存储器能够表示多种数据格式,并能够为数据格式转换提供各种支持。管道-过滤器架构风格通常只能支持有限度的数据格式,并且在数据格式转换方面的灵活性较差。

问题2:

为了满足需求(2),应该采用解释器架构风格。具体来说,需要:

  1. 为可视化编程元素及其拖拽关系定义某种语言,并描述其语法与语义;
  2. 编写解释器对该语言进行解释;
  3. 生成对应的脚本语言程序。

为了满足需求(3),应该采用隐式调用架构风格。具体来说:

  1. 首先需要定义“断点在调试过程中命中”这一事件,并实现当断点命中后的屏幕定位函数。
  2. 集成开发环境维护一个事件注册表结构,将该事件与屏幕定位函数关联起来形成注册表中的一个记录项。
  3. 在调试过程中,集成开发环境负责监听各种事件,当“断点在调试过程中命中”这一事件发生时,集成开发环境查找事件注册表,找到并调用屏幕定位函数,从而实现脚本语言编辑界面与调试代码的自动定位。

>>回到总目录<<

本文含有隐藏内容,请 开通VIP 后查看