分层和管道和过滤器

时间:2014-01-26 15:07:29

标签: architectural-patterns

在使用这些模式的情况下,我有点困惑,因为从某种意义上说,它们看起来和我相似?

据我所知,Layered在系统复杂时使用,可以按层次划分,因此每层在不同层次结构上都有一个功能,并使用较低层次的功能,同时暴露它功能更上一层楼。

另一方面,管道和过滤器基于处理数据的独立组件,并且可以通过管道连接,因此它们构成了执行完整算法的整体。

但是如果层次结构不存在,那么如果模块的顺序可以改变,那一切都会受到质疑吗?

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

澄清事情的一些例子会很好,消除我的困惑。提前谢谢......

2 个答案:

答案 0 :(得分:9)

回答可能为时已晚,但无论如何我都会尝试。 两种架构风格的主要区别在于数据流。

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

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

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

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

答案 1 :(得分:4)

1。)分层架构分层架构,它将整个系统视为 -

  

结构层次结构

软件系统被分解为不同层次的逻辑模块。

其中

2。)管道和过滤器数据流架构,它将整个系统视为 -

  

连续数据集的一系列转换

其中的数据和操作彼此独立。