0%

通用架构风格

引子

架构风格

引问

1. 设计词汇表是什么
2. 构件和连接件的类型是什么?
3. 可容许的结构模式是什么?
4. 基本的计算模型是什么?
5. 风格的基本不变性是什么?
6. 其使用的常见例子是什么?
7. 使用此风格的优缺点是什么?
8. 其常见的特例是什么?

以上问题包括了 架构风格的最关键的四要素内容:

- 提供一个词汇表
- 定义一套配置规则
- 定义一套语义解释原则
- 定义对基于这种风格的系统所进行的分析

根据此框架给出了通用架构风格的分类:

1. 数据流风格:批处理序列;管道 /过滤 器。
2. 调用 /返回风格:主程序 /子程序;面向对象风格;层次结构。
3. 独立构件风格:进程通信;事件系统。
4. 虚拟机风格:解释器;基于规则的系统。
5. 仓库风格:数据库系统;超文本系统;黑板系统。

数据流风格

数据流风格的软件架构是最常见,结构最简单的软件架构。 在这样的架构下,所有的数据按照流的形式在执行过程中前进,不存在结构的反复和重构,就像工厂中的汽车流水线一样,数据就像汽车零部件一样在流水线的各个节点上被加工,最终输出所需要的结果。在流动过程中,数据经过序列间的数据处理组件进行处理,然后将处理结果向后传送,最后进行输出。

数据流风格架构主要包括:批处理序列和管道-过滤器

1.批处理序列

批处理风格的每一步处理都是独立的,并且每一步都是顺序执行的。只有前一步处理完,后一步才能开始。数据传送在步与步之间最为一个整体。

组件为一系列固定顺序的计算单元,组件之间只通过数据传递交互。每个处理步骤都是一个独立的程序,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。

典型应用:

1. 经典数据处理;
2. 程序开发
3. Windows下的Bat程序

2. 管道-过滤器

在管道-过滤器风格的软件架构中,每个构件都有一组输入/输出,构件读输入的数据流,经过内部处理,产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。

此风格特别重要的过滤器 必须是独立的实体 ,不能与其他的过滤器共享数据,而且一个过滤器不知道它上下游的标识。一个管道-过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。

典型的例子:

1. Unix Shell 编写的程序

此风格的优点:

1. 使得软构件具有良好的隐蔽性和高内聚、低耦合的特点
2. 允许设计者将整个系统的输入/输出看成是多个过滤器的行为的简单合成
3. 支持软件重用。只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来
4. 系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉
5. 允许对一些如吞吐量、死锁等属性的分析
6. 支持并行执行。

此风格的缺点:

1. 通常导致进程成为批处理的结构。这是因为虽然过滤器可增量处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。
2. 不适合处理交互的应用。当需要增量的显示改变时,这个问题尤为严重
3. 由于在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作。这导致系统性能下降,增加了编写过滤器的复杂性

3. 批处理序列风格和管道过滤器风格对比

共同点: 把任务分成一系列固定顺序的计算单元(组件)。组件只通过数据传递交互。

区别:

批处理是全部的,高潜伏性的,输入时可随机存取,无合作性,无交互性。
管道-过滤器是递增的,数据结果延迟小,输入时处理局部化,有反馈、可交互。

批处理强调数据传送在步与步之间作为一个整体,而管道过滤器无此要求。

调用/返回风格

调用返回风格是指在系统中采用调用与返回机制。采用调用-返回实际上是分治策略,将一个复杂的大系统分解为一些子系统,以便于降低复杂度,并且增加可修改性。程序从其执行起点开始执行构件代码,执行结束,将控制返回给程序调用构件。

调用/返回风格架构主要包括:主程序/子程序、面向对象风格、层次结构

1. 主程序/子程序

此风格是结构化开发时期的经典架构风格。这种风格一般采用单线程控制,把问题划分为若干处理步骤,构件为主程序和子程序。子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。调用关系具有层次性,语义逻辑表现为子程序的正确性取决于它调用的子程序的正确性

2. 面向对象风格

抽象数据类型对软件系统有着很重要的作用,目前软件界已经普遍使用面向对象系统

这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。

这种风格的构件是对象,对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的

这种风格的两个重要特征为:

1. 对象负责维护其表示的完整性
2. 对象的表示对其他对象而言是隐蔽的。因为一个对象对它的客户对象隐藏了自己的表示,索引这些对象可以不影响它的客户就能改变其实现方法。

面向对象的系统的优点

1. 因为对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其他的对象
2. 设计者可以将一些数据存取操作问题分解为一些交互的代理程序的集合

面向对象的缺点

1. 一个对象为了和另一个对象进行交互,必须知道对象的标识。只要一个对象的标识改变了,旧必须修改所有其他明确调用它的对象。
2. 必须修改所有显示调用它的其他对象,并消除由此带来的一些副作用。例如,如果A使用了对象B,C也使用了对象B,那么C对B的使用所造成的对A的影响可能也是料想不到的

3. 层次结构风格

欢迎关注我的其它发布渠道