2014-01-26 84 views
3

我在哪些情况下应该使用这些模式有点困惑,因为从某种意义上说,它们看起来与我相似?分层和管道和过滤器

我知道当系统复杂时可以使用Layered,并且可以按照层次结构划分层次结构,因此每个层次都有不同级别的层次结构函数,并且在较低层次上使用函数,同时公开其功能更高一级。另一方面,Pipe-and-Filter基于独立的组件处理数据,并且可以通过管道连接,因此它们构成一个完整的执行完整算法的组件。

但是,如果层次结构不存在,那么所有模块的顺序是否可以改变都会出现问题?

而令我困惑的一个例子是编译器。这是管道和过滤器体系结构的一个例子,但是如果我没有错,某些模块的顺序是相关的。

澄清事情的一些例子会很好,以消除我的困惑。在此先感谢...

回答

7

也许回答已经太迟了,但我仍会尝试。 这两种架构风格之间的主要区别是数据流。

一方面,对于管道和过滤器,数据从第一个过滤器推到最后一个过滤器。 而且他们会被推,否则,这个过程不会被视为成功。例如,在汽车制造工厂中,每个工位都相互靠拢。该车将从第一个车站组装到最后一个。 如果没有任何问题,最终你会得到一辆完整的汽车。 这对于编译器例子也是如此。您从上次编译过程中获得二进制代码。

另一方面,分层体系结构决定组件被分组在所谓的层中。 通常,客户端(访问系统的用户或组件)只能从最顶层访问系统。他也不在乎系统有多少层。他只关心他正在访问的层的结果(这是最高层的结果)。 这与输出来自最后一个过滤器的管道和过滤器不同。

另外,正如您所说,同一层中的组件正在使用来自较低层的“服务”。 但是,并非来自下层的所有服务都必须被访问。 也不是上层必须访问下层。 只要客户得到他想要的东西,系统就可以工作。 与TCP/IP架构类似,用户正在使用应用程序层的Web浏览器,而无需了解Web浏览器或任何底层协议如何工作。

对于您的问题,分层架构中的“层次结构”只是一个逻辑模型。 你可以说它们是包或者一些组件访问链中的组件。 这里的关键是结果必须从最后一个组件返回到第一个组件(客户端正在访问的地方)。 (与管道和过滤器相反,客户端从最后一个组件获得结果)

3

1。)分层架构分层架构,它把整个系统 - 该软件系统在不同级别的层次结构的分解成逻辑模块结构

层次结构。

其中作为

2.)管道和过滤器数据流体系结构,它把整个系统 - 上连续集合

一系列变换的数据

其中数据在它上面的操作是相互独立的。