Garlan和Shaw将软件架构风格分为五大类,数据流风格、调用/返回风格、独立构件风格、虚拟机风格和仓库风格。

数据流风格的特征是:数据的可用性决定处理是否被执行; 系统结构由数据之间的有序移动来决定; 在纯数据流系统中, 处理之间除了数据交换没有其它的交互。

一套完整的数据架构(软件架构模式数据流风格)(1)

数据流的组件是各个计算单元,连接件是输入输出流. 然后只有各个组件之间数据近线性流通或者有限循环流通才能应用数据流风格. 如果数据在各个组件之间杂乱无序地流通, 应用数据流风格很容易出现死锁的现象。

数据流风格分为批处理风格和管道过滤器风格.其中批处理是各个处理单元只有等到上一个处理单元把全部数据处理完才能开始处理这些数据, 各个处理单元相互独立. 而管道过滤器类似自来水管, 上一个处理单元处理一条数据就会发送给下一个处理单元进行处理. 这两种方式的主要区别是一个强调整体数据的传输, 一个是强调增量式的传输。

实际情况,通常会根据业务的需求来选择不同的处理模型. 比如在编译器程序里面会选择批处理风格, 比如先整体进行代码分析得到抽象语法树才会进行下一步的处理, 不同代码文件之间有一定关联性就要求需要整体处理分析. 在数据源源不断产生的场景, 系统需要对这些数据进行一系列的处理, 可以利用管道过滤器风格。

数据流风格有很多优点.整个系统也可以看成是由几个独立的处理单元简单合成. 复用性强, 只要提供两个计算单元之间的数据格式, 任何两个处理单元都可以被连接起来. 系统维护和增强性简单, 新的可以添加的现有的系统当中, 旧的可以被改进的过滤器替换. 有一定的并行, 特别是管道过滤器风格, 不需要等待所有数据处理完, 另外各个处理单元相互独立, 可以并行计算。

然而数据流风格也有一些缺点.不适合适处理交互的应用. 系统性能并不高, 需要在各个管道之间复制数据, 不适合大量数据需要共享的应用上.数据传输格式没有统一的标准,大部分时间用来处理格式转换上。

数据流风格包括“批处理“风格和管道-过滤器”风格

一套完整的数据架构(软件架构模式数据流风格)(2)

1、批处理序列 (数据完整,整体传递)

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

2、管道-过滤器 (数据可不完整,所有构件都有输入 输出)

每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常是通过对输入数据的变换或计算来完成的,包括通过计算和增加信息以丰富数据、通过浓缩和删除以精简数据、通过改变记录方式以转化数据和递增地转化数据等。这里的构件称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。

,