软件架构风格是什么?我的理解:通俗一点来讲,好比建造房子,有中式建筑,欧式建筑,法式建筑等。这些不同的建筑风格,从外观上看,一眼就能看出来差别。
- 中式建筑风格:主张“天人合一,浑然一体”,居住讲究“静”和“净”,环境的平和和建筑的含蓄;
- 欧式建筑风格:强调以华丽的装饰、浓烈的色彩、精美的造型达到雍容华贵的装饰效果;
- 法式建筑风格:以清新、亮丽、现代为基调而形成轻盈、活泼的建筑形态,打破了混凝土方盒带来的凝重和沉闷,也有追求建筑整体造型雄伟,通体洋溢着新古典主义。
回过头来,再看计算机软件系统中的架构风格,其实类似上面提到的建筑风格,它的定义是这样的:描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
计算机软件系统常见的架构风格定义及应用举例:
一、 管道和过滤器风格
定义:在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
应用举例:设计模式中的责任链模式;J2EE 中的拦截器;大数据中的流式计算等都属于这种风格;
二、 数据抽象和面向对象的风格
定义:这种架构风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。这种风格很好理解吧,做过java的朋友都知道,面向对象的设计思想就是这种风格的体现。
应用举例:面向对象的开发语言都具备这种风格,面向对象的分析、设计、编码。
三、 基于事件的隐式调用风格
定义:基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
应用举例:这种模式应用很多也比较常用,例如设计模式中的观察者模式,发布/订阅模式;消息队列中间件;LINUX系统中的事件轮询机制等;
四、层次调用风格
定义:层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。这样的系统中构件在一些层次实现了虚拟机(在另一些层次系统中层是部分不透明的)。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
应用举例:常用的分层架构都属于层次调用风格。比如经典的二层架构、三层架构,这种架构风格的也比较常见。
五、仓库风格
定义:包含一个数据仓库和若干其他构件,数据仓库位于该体系结构的中心。这个似乎不太好理解,举个例子,我们在开发数据库应用软件时,就可以理解为系统的整体是一个仓库风格。系统的各个功能模块都以数据库为中心,对外提供增删改查的功能。
应用举例:一般的数据库系统软件都属于这种风格。