什么是软件体系结构风格?
软件体系结构风格(Architectural Styles)是描述特定系统组织方式的惯用范例,强调了软件系统中通用的组织结构。
风格这个词是个模糊的概念,不同的人有不同的理解,这有时候就让人很困惑。这时候为了明确这个概念,通过数学集合的方式来定义风格,如此一来,我们更能认清风格的内部结构及本质。
同样,针对某种软件应用场景,应该选择与其相适应的构件,以及合理安排构件间的关系。在后面的具体体系结构风格中,可以重点查看构件、连接件、结构安排的不同(这些区分了不同的风格,适用于不同的场景)
体系结构的作用
对于一些高质量的软件,一般要选择合适的体系结构风格,以便重用现有的设计方案和实现方案,加快开发的进度。
主程序 - 子程序 风格
主程序-子程序风格是结构化程序设计的一种典型风格,从功能的观点设计系统,通过逐步分解和细化,形成整个系统的体系结构。
面向对象 风格
与前面的主程序 - 子程序风格比,面向对象风格中的构件变成了对象(不同于主程序、子程序的概念),并且连接的方式也发生了相应的变化。
系统被看作是对象的集合,每个对象都有一个它自己的功能集合;
• 数据及作用在数据上的操作被封装成抽象数据类型;
• 只通过接口与外界交互,内部的设计决策则被封装起来。
管道-过滤器风格
管道-过滤器风格把系统任务分成若干连续的处理步骤,这些步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入。
管道-过滤器风格并没有讨论构件本身特质的不同(与主程序-子程序风格相比),而是限制了各个构件的连接方式,一个步骤的输出是下一个步骤的输入。
在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体,它不能与其它的过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。一个管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。(摘自:【百度百科】软件体系结构)
管道/过滤器风格的特点:(摘自:【百度百科】软件体系结构)
(1)使得软构件具有良好的隐蔽性和高内聚、低耦合的特点;
(2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;
(3)支持软件重用。重要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;
(4)系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;
(5)允许对一些如吞吐量、死锁等属性的分析;
(6)支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。
举例1:(媒体播放器)
举例2:(编译器)
以数据为中心的风格
在以数据为中心的风格中,往往将数据存储构件作为核心,与其他构件紧密结合,形成类似于星型结构的拓扑关系。
举例1:剪贴板
举例2:仓库体系结构
仓库体系结构(Repository Architecture)是一种以数据为中心的体系结构,适合于数据由一个模块产生而由其他模块使用的情形。
仓库体系结构应用示例: