一、 概述
(个人粗浅之见)
每个系统都有自己的体系结构,每个都和其它的不同。如Windows之于Linux,美国的资本主义三权分立行政制度之于我中国社会主义人民代表大会制度,汽车的内燃机动力系统之于电动车的电机动力系统,......软件是计算机系统这个蔚蓝星球里的里的某个生态系统,丰富多彩的生态系统让这个星球充满了生机与活力。丰富多彩的软件世界里,用户眼里软件的区别也许只是界面不同,功能不同而已,但在设计人员的心中每个软件都是那么独特精巧的存在,每个软件的体系结构,构件,连接,约束,模块,功能等等,都凝集了一代代码农的汗水,心血,和期望。
如同每幢建筑都有一个精巧体系结构,每个软件也需要一个精巧的体系结构以提供足够的效率,使之能在计算机平台上更快,更省地跑起来,更加完美地实现用户的需求。
科学高效的体系结构的选择不仅仅让程序更好地运行,还能在开发阶段提高开发效率
管道过滤器风格
管道-过滤器模式的体系结构是面向数据流的软件体系结构。它最典型的应用是在编译系统。一个普通的编译系统包括词法分析器,语法分析器,语义分析与中间代码生成器,优化器,目标代码生成器等一系列对源程序进行处理的过程。人们可以将编译系统看作一系列过滤器的连接体,按照管道-过滤器的体系结构进行设计。此外,这种体系结构在其它一些领域也有广泛的应用。因此它成为软件工程和软件开发中的一个突出的研究领域
(以上引用自百度百科)
在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
(图片引用自网络)
二、 实例
以软件工程导论的个人项目为例,讲讲我对管道过滤器风格的理解。
个人项目需求简述如下
小初高题库
1、选择学校并输入题目数量
2、试卷以txt格式保存到本地
3、文件名为系统时间
4、计算每道题目答案
·
我的设计
我的设计就是典型的管道过滤器风格了。从我的设计中可以看出这几个优点:
一、 支持功能模块级别的重用
比如我要设计一个自动储存储存截图的软件,就可以把存储器模块修改下拿来用;
比如我要设计一个闹钟,那么就可以把获取系统时间模块改改拿来用
二、 易于维护和拓展
比如我要提高答案计算的速度,那么我只需要改答案计算模块就好了
比如我要加一个上传功能,那么加一个上传功能模块就行
三、 方便系统分析
在测试阶段运行结果不正确可以单独测试每一个或几个模块的运行是否正常
四、 支持并发执行
生成题目模块和获取系统时间模块是并发执行的,提高了一点点效率
也可以看出几个缺点:
一、 通过过长的管道可能会增加延迟
管道过长,一个个过滤器跑完,延迟就是管道上每个过滤器的延迟的和
比如我把获取系统时间加进题目生成器和存储器之间,延迟就会增加
二、 不适合处理交互的应用
因为过滤器的输入输出都有限制
三、 不适合需要共享数据的应用程序设计
每条管道的输入输出互不影响,管道里的每个过滤器的输入输出也互不影响,在管道或在过滤器之间进行的数据交互需要大量数据处理空间,数据的执行将占用大量系统运行时间
三、 总结
在两年前的我们中,大多数还只是只懂helloworld的萌新,学得深入点了,老师要实现什么功能就新建一个源代码或者函数,大不了复制粘贴;只要能过oj,谁管代码浪费了多少资源和时间啊。。但作为成熟的老司机,都或早或晚地会察觉到,在一个类里通过内部类和函数实现所有功能是多么鸡肋。比如有时候验收了,自己看半天才能看懂自己的代码;想要重新利用一下以前写的代码却不知道要从哪一行复制到哪一行了。。
在实践和前辈的经验教训下,新农业从事人员都认识到软件体系结构对于软件的必要性。软件体系结构不仅仅只是在代码上体现出来,还必须是能在抽象层面上用文字图形描述出来。首先,这保证了软件设计的易读性,其次,在读懂的基础上才能进行维护,改良,重用等等。合理选择软件的体系结构,对开发维护工作的效率影响很大。
一个软件的体系结构可能不止一种风格;每一种风格都有其优点和缺点,风格的选择上应因地制宜。软件体系结构风格在教材上概括为以下:管道-过滤器风格、面向对象风格、事件驱动风格、分层风格、数据共享风格、解释器风格、反馈控制环风格。7种系统构建模式之间不仅有联系,而且在很多情况下它们往往是配合使用的。即面对一个实际系统,单纯的把它归到哪一种类型都是很勉强的。这样的系统可以称为复合型系统,这样的系统构建模式就称为异构风格的集成。所以因地制宜选取一种或几种风格是开发工作常常要考虑到的。
原文地址:https://www.cnblogs.com/Doke-Law/p/9874228.html