Mar*_*rko 5 architectural-patterns
我有点困惑在哪些情况下应该使用这些模式,因为在某种意义上,它们看起来与我相似?
我知道分层是在系统复杂时使用的,并且可以按其层次划分,因此每个层在不同层次的层次上都有一个功能,并使用较低层次的功能,同时将其功能暴露给更高层次.水平.
另一方面,管道和过滤器基于处理数据的独立组件,并且可以通过管道连接,因此它们构成了执行完整算法的整体.
但是,如果层次结构不存在,那么如果可以更改模块的顺序,那么这一切都会受到质疑吗?
一个令我困惑的例子是编译器.这是管道和过滤器架构的一个例子,但是如果我没有错的话,某些模块的顺序是相关的?
澄清事情的一些例子会很好,以消除我的困惑.提前致谢...
也许现在回答为时已晚,但无论如何我都会尝试.两种架构风格之间的主要区别在于数据流.
一方面,对于管道和过滤器,数据从第一个过滤器推送到最后一个过滤器.他们将被推动,否则,这个过程将不会被视为成功.例如,在汽车制造工厂中,每个工位彼此相继放置.这辆车将从第一站到最后一站组装.如果没有任何问题,最后你会得到一辆完整的汽车.对于编译器示例也是如此.从最后一次编译过程中获得二进制代码.
另一方面,分层架构规定组件分组在所谓的层中.通常,客户端(访问系统的用户或组件)只能从最顶层访问系统.他也不关心系统有多少层.他只关心他正在访问的层的结果(这是最顶层的).这与输出来自最后一个过滤器的管道和过滤器不同.
此外,正如您所说,同一层中的组件使用来自较低层的"服务".但是,并非所有来自较低层的服务都必须被访问.也不是说上层必须完全进入下层.只要客户得到他想要的东西,系统就可以工作了.与TCP/IP架构一样,用户使用来自应用层的Web浏览器,而不知道Web浏览器或任何底层协议如何工作.
对于您的问题,分层体系结构中的"层次结构"只是一个逻辑模型.你可以说它们是包或者链中相互访问的一些组件组.这里的关键点是结果必须从最后一个组件返回到第一个组件(客户端访问的位置).(与管道和过滤器不同,客户端从最后一个组件获取结果.)