【软件体系结构】软件体系结构风格
5.1?? ?软件体系结构风格概述
????????多年来,人们在开发某些类型软件过程中积累起来的组织规则和结构,形成了软件体系结构风格。
????????软件体系结构风格,是总结人们设计经验而形成结构较为巩固、组织较为统一的形式,是一种适合于多种场合的相似结构的抽象。
????????软件体系结构设计的一个核心问题是,能否使用重复的体系结构模式,即能否达到体系结构级的软件重用。
5.2?? ?基本风格解析
5.2.1?? ?管道-过滤器
????????管道-过滤器模式下,每个功能模块都有一组输入和输出。
????????功能模块从输入集合读入数据流,并在输出集合产生输出数据流,即功能模块对输入数据流进行增量计算得到输出数据流。
????????管道-过滤器模式下,功能模块称作过滤器(Filter)。
????????功能模块间的连接可以看作输入、输出数据流之间的通路,所以称作管道(Pipe)。
?????????如果要建立一个必须处理或转换输入数据流的系统,用单个组件实现会过于臃肿,需求不容易变动,故选用管道过滤器风格。
????????管道-过滤器体系结构模式,把系统任务分成几个序贯的处理步骤。这些步骤,通过系统的数据流连接,一个步骤的输出,是下一个步骤的输入。每个处理步骤由一个过滤器组件实现。过滤器消耗和转发增长的数据,在产生任何输出之前,消耗所有输入,以达到低延迟并能够真正地并行处理。系统的输入,由诸如文本文件等数据源提供。输出流入数据汇点,如文件、终端。数据源、过滤器和数据汇点由管道顺序连接起来。实现相连处理步骤间的数据流动。通过管道联合的过滤器序列叫做处理流水线。
????????过滤器必须是独立的实体,不了解信息流从哪个过滤器流出,也不需要知道信息将流入哪个过滤器。可以指定输入的格式,可以确保输出的结果,但是可能不知道在管道之后将会是什么样子。过滤器之间,也不共享状态。
5.2.2?? ?数据抽象和面向对象风格
????????必须修改所有显式调用它的其他对象,并消除由此带来的一些副作用。例如,如果A使用了对象B,C也使用了对象B,那么C对B的使用所造成的对A的影响,可能是预想不到的。
????????在这种体系结构中,数据表示和相关原语操作都被封装在抽象数据类型中。在这种风格中,对象是构件,也成为抽象数据类型的实例。对象与对象之间,通过函数调用和过程调用来进行交互。
5.2.3?? ?基于事件的隐式调用风格
????????系统中的其它构件中的过程,在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发,就导致了另一模块中的过程的调用。
????????
5.2.4?? ?分层系统风格
????????其中,每一层软件,建立在低一层的软件层上。 位于同一层的软件系统或子系统,具有同等的通用性,在下一层的软件比在上一层的软件通用性更强。一个层次可视为同等通用档次的一组(子)系统
5.2.5?? ?仓库风格和黑板风格
????????仓库风格的体系结构由两个构件组成。一个中央数据结构,表示当前状态,一个独立构件的集合,对中央数据结构进行操作。
????????黑板体系结构实现的基本出发点,是已经存在一个对公共数据结构进行协同操作的独立程序集合。
????????对于系统中数据和状态的控制方法有两种。一个传统的方法是,由输入事务选择进行何种处理,并把执行结果作为当前状态存储到中央数据结构中,这时,仓库是一个传统的数据库体系结构。 另一种方法是,由中央数据结构的当前状态,决定进行何种处理。这时,仓库是一个黑板体系结构。即黑板体系结构是仓库体系结构的特殊化。
????????
????????一个典型的黑板系统主要包括知识源、中央控制单元、控制单元。
????????KS(Knowdge Source)表示知识源,是仓库中信息的来源。 彼此之间,在逻辑上和物理上都是独立的,只与产生它们的应用程序有关。多个数据源之间,通过中央数据单元协调进行交互,对外部而言,是透明的
????????中央控制单元是整个系统的核心部件,对系统需要解决的问题预先进行了分析、定义,总结出了系统运行过程中将要出现的多种状态,并制定了这些状态下系统的相应对策。 所以,中央数据单元中的数据不只是单纯的数据信息,代表了某种系统的状态,属于状态数据。
????????控制单元的驱动,完全是由仓库的状态变化承担的。 知识源将系统需要处理的信息源源不断地输入仓库中,导致仓库的状态信息发生变化。 当状态信息的变化符合系统预先定义好的某些控制策略时,相应的控制操作,就得到了触发,也就实现了系统的功能控制。
????????在这种风格中,有两种不同类型的软件元素:一种是中央数据单元,也成为资源库,用于表示系统的当前状态;另一种是相互依赖的构件组,这些构件可以对中央数据单元实施操作。中央数据单元和构件之间可以进行信息交换,这是数据共享体系结构的技术实现基础。
5.2.6?? ?模型-视图-控制器风格
????????
????????
??????
????????模型包含了应用问题的核心数据、逻辑关系、计算功能,封装了所需的数据,提供了完成问题处理的操作过程。控制器依据I/O的需要调用这些操作过程。 模型还为视图获取显示数据而提供了访问其数据的操作。这种变化-传播机制,体现在各个相互依赖部件之间的注册关系上。 模型数据和状态的变化,会激发这种变化-传播机制,是模型、视图和控制器之间联系的纽带。
???
????????视图通过显示的形式把信息转达绐用户。 不同视图通过不同的显示,来表达模型的数据和状态信息。 每个视图有一个更新操作,可被变化-传播机制所激活。当调用更新操作时,视图获得来自模型的数据值,来更新显示。 在初始化时,通过与变化-传播机制的注册关系建立起所有视图与模型间的关联。视图与控制器之间,保持着一对一的关系,每个视图创建一个相应的控制器。 视图提供给控制器处理显示的操作。因此,控制器可以获得主动激发界面更新的能力。?
????????控制器通过时间触发的方式,接收用户的输入。控制器如何获得事件,依赖于界面的运行平台。 控制器通过事件处理过程对输入事件进行处理,并为每个输入事件提供相应的操作服务,把事件转化成对模型或相关视图的激发操作。 如果控制器的行为,依赖于模型的状态,则控制器应该在变化-传播机制中进行注册,并提供一个更新操作,这样,可以由模型的变化来改变控制器的行为,如禁止某些操作。
5.2.7?? ?解释器风格
????????解释器风格通常被用于建立一种虚拟机,以弥合程序的语义与作为计算引擎的硬件的间隙。 由于解释器实际上创建了一个软件虚拟出来的机器,所以,这种风格又常常被称为虚拟机风格。 例如,程序设计语言的编译器,比如Java、Smalltalk等;基于规则的系统,比如专家系统领域的Prolog等;脚本语言,比如Awk、Perl等。
5.2.8?? ?C2风格
????????C2体系结构风格可以概括为,通过连接件绑定在一起的、按照一组规则运作的并行构件网络。
????????C2风格中的系统组织规划如下:系统中的构件与连接件,都有一个顶部和一个底部。 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,构件与构件之间的直接连接,是不允许的。 一个连接件,可以和任意数目的其它构件和连接件连接。 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
? ? ? ?
例题1:上下文关键字:
????????David Parnas在1972年的论文中,提出下述问题,上下文关键字(Key Word in Context,KWIC)检索系统接受有序的行集合;每一行是单词的有序集合;每一个单词又是字母的有序集合。
????????通过重复地删除行中第一个单词并把它插入到行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序,输出一个所有行循环移动的列表。
? ? ? ? 1:一种是基于功能分解,可以共享访问数据表示:第一种解决方案根据四个基本功能将问题分解为输入、移动、按字母表排序、输出。所有计算构件作为子程序协同工作,并且由一个主程序顺序地调用这些子程序。
????????构件通过共享存储区(核心存储区)交换数据。因为协同工作的子程序能够保证共享数据的顺序访问,因此,使得计算构件与共享数据之间基于一个不受约束的读写协议的通信成为可能。
? ? ? ? 2:另一种,是基于隐藏设计决策的分解:抽象数据类型
????????第二种解决方案将系统分解成五个模块。然而,在这种情况下,数据不再直接地被计算构件共享。取而代之的是,每个模块提供一个接口,该接口允许其他构件通过调用接口中的过程来访问数据。每个构件提供了一个过程集合,这些过程,决定了系统中其他构件访问该构件的形式。
????????这种解决方案与第一个方案一样,将系统在逻辑上分成几个处理模块。 然而,当设计变更时,这种方案比第一种具有一些优势。 特别是,在一个独立的模块中算法和数据表示的改变,不会影响其他模块。另外,为重用提供了更好的支持,因为模块几乎不需要考虑,与其交互的其他模块的情况。
????????3.隐式调用
????????第三种方案,采用基于共享数据的构件集成的方式,这和第一种方案有些相似。然而,这里有两个主要的不同。
????????第一,数据访问接口更加抽象,这种方案可以抽象地访问数据(比如作为表或集合),而不需要知道数据的存储格式。 第二,当数据被修改时,计算被隐式地调用,因而交互是基于“动态数据”模型的。例如,向行存储区添加一个新行的动作,会激发一个事件,这个事件被发送到移动模块。
? ? ? ? 4.管道-过滤器
????????第四种解决方案,采用管道的方式。这种情况下,有四个过滤器:输入、移动、按字母表排序、输出。
????????每一个过滤器处理完数据,并发送到下一个过滤器。控制是分布式的,只要有数据通过,过滤器就会进行处理。 过滤器之间的数据共享,严格地局限于管道中传输的数据。
????????
?案例2:仪器软件
????????这项工程的目的,是为示波器开发一种可重用的系统体系结构。示波器是一个仪器系统,能对电信号取样,并且在屏幕上显示电信号的图像(踪迹)。 示波器通常对信号进行测量,并显示在屏幕上。尽管示波器曾经是一个简单的模拟设备,几乎不需要软件,但是现代示波器主要依靠数字技术,并且使用非常复杂的软件。
????????1.?? ?面向对象模型
????????开发一个可重用体系结构的最初尝试,是开发一种面向对象的软件模型,这个模型阐明了在示波器中使用的对象类型:波形、信号、测量值、触发模型等。
? ? ? ? 量度是否应该与被测量的或者被外部表示的数据类型相关联?用户界面应该和哪些对象交互?
????????
????????2.?? ?分层模型
????????在模型中,核心层提供信号处理功能,当信号进入示波器时,使用这些功能过滤信号。这些功能通常通过硬件实现。 第二层提供波形采集功能。在这层中信号被数字化,并且被内部保存用于以后的处理。 第三层提供波形处理功能,包括测量、波形叠加、傅里叶转换。 第四层提供显示功能,即负责将数字化的波形与测量值直观表示出来。 最外层是用户界面。这一层负责与用户进行交互,并决定在屏幕上显示哪些数据。
????????3.?? ?管道-过滤器模型
????????第三种尝试产生了一个模型,这个模型中,示波器功能,被看成是数据的增量转换器。信号转换器用来检测外部信号。
????????采集转换器用来从这些信号中导出数字化波形。显示转换器再将这些波形转换成可显示的数据。
????????这种体系结构模型和分层模型相比,有很大改进,因为没有在功能划分中将各个功能孤立起来。比如,信号数据可以直接流入显示过滤器,而不会被其他过滤器干扰。 另外,从工程师的角度看,模型将信号处理作为数据流问题,是比较合适的,模型也允许在系统设计中硬件与软件构件的灵活混合和替换。
????????4.?? ?改进后的管道-过滤器模型
????????第四种解决方案,解决了用户输入问题,即通过为每个过滤器添加一个控制界面,这个界面允许外部实体为过滤器设置操作参数。
????????比如,采集过滤器具有某些参数,用来确定采样频率和波幅。 这些输入,可以作为示波器的配置参数。我们可以将这些过滤器想象成一个具有“控制面板”的界面,通过它,我们可以控制在输入/输出界面上将要执行哪些功能。形式上,过滤器可以被模拟成函数,配置参数决定了过滤器将执行什么数据转换。
????????5.?? ?专用化模型
????????改造后的管道-过滤器模型,有了很大改进,但是,同样还存在一些问题。最显著的问题,是管道-过滤器计算模式的性能非常差。
????????为了解决这些问题,需要将模型进一步地专用化。我们引进多种“颜色”的管道,而不只是使用一种管道。
????????一些管道允许,某些过滤器在处理数据时不必复制数据。 另一些管道允许,慢速过滤器在数据没有处理完时忽略新来的数据。 这些附加的管道,增加了风格词汇表并,且可以根据产品的性能,定制管道-过滤器的计算模式。
5.3? ? 客户/服务器风格
????????
5.4? ?三层客户/服务器结构风格
????????与二层C/S结构相比,在三层C/S体系结构中,增加了一个应用服务器,可以将整个应用逻辑驻留在应用服务器上,而只有表示层存在于客户机上。这种结构,被称为“瘦客户机”。
????????
惯用模式:
B/S结构是三层C/S体系结构的一种实现方式,主要包括浏览器,Web服务器和数据库服务器
三层C/S体系结构,将应用功能分成表示层、功能层和数据层3个部分
5.5? ? 浏览器/服务器风格
????????在B/S体系结构下,用户界面完全通过WWW浏览器实现,部分事务逻辑在前端实现,但是,主要事务逻辑在服务器端实现。 它利用浏览器技术,结合浏览器的多种脚本语言并通过浏览器,就实现了原来需要复杂的专用软件才能实现的强大功能,是一种全新的软件体系结构。
5.6? ? C/S与B/S混合结构风格
????????在B/S体系结构下,用户界面完全通过WWW浏览器实现,部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。?? ?
5.7?? ?正交软件体系结构风格
? ? ? ? 正交软件体系结构,由组织层和线索的构件构成。 层是由一组具有相同抽象级别的构件构成的。线索是子系统的特例,由完成不同层次功能的构件组成(通过相互调用来关联),每一条线索完成整个系统中相对独立的一部分功能。 每一条线索的实现,与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。
? ? ? ? 特征:(1)正交软件体系结构由完成不同功能的n(n>1)个线索(子系统)组成。 (2)系统具有m(m>1)个不同抽象级别的层。 (3)线索之间是相互独立的(正交的)。 (4)系统有一个公共驱动层(一般为最高层,和公共数据结构(一般为最低层)。
????????
例子
????????以某省电力局的一个管理信息系统为例,讨论正交软件体系结构的应用。
????????设计初期,考虑到未来可能进行的机构改革,在系统投入运行后,单位各部门的功能有可能发生以下变化:
????????(1)某些部门的功能可能改变或取消,或转入另外的部门,或其工作内容发生变更。 (2)有的部门可能被撤销,其功能被整个并入其他部门或分解并入数个部门。 (3)某些部门的功能可能需要扩充。
????????按照上述思想,首先,将整个系统设计为两级正交结构,第一级划分为38个主线索(子系统),每个主线索,又可划分为数个子线索(≥2)。
????????为了简单起见,仅就其中的一个主线索进行说明,其它主线索的子线索划分,也采用大致相同的策略。 该主线索所实现的功能,属于多种经营管理处的范围:该处有生产经营科、安全监察科、财务科、劳务科,包括11个管理功能(如人员管理、产品质量监督、安全监察、生产经营、劳资统计等),即11个子线索。
5.8? ? 异构结构风格?? ?
????????“内外有别”模型的优点,是外部用户不直接访问数据库服务器,能保证企业数据库的相对安全。
????????(1)因为本部分只讨论软件体系结构问题,所以在模型图中省略了有关网络安全的设备,如防火墙等,这些安全设备和措施是保证数据安全的重要手段。 (2)在这两个模型中,只注明(外部用户)通过因特网连接到服务器.但并没有解释具体的连接方式,这种连接方式取决于系统建设的成本和企业规模等因素。例如,某集团公司的子公司要访问总公司的数据库服务器,既可以使用拨号方式,也可以使用DDN方式等。 (3)本部分对内部与外部的区分,指是否直接通过内部局域网连接到数据库服务器进行软件规定的操作,而不是指软件用户所在的物理位置。例如,某个用户在企业内部办公室里,其计算机也通过局域网连接到了数据库服务器,但当他使用软件时,是通过拨号的方式连接到Web服务器或数据库服务器,则该用户属于外部用户。
构件协调问题
????????软件工程师有许多技术来处理结构上的不匹配。最简单的描述这些技术的例子,是只有两个构件的情况。这两个构件,可以是对等构件、一对相互独立的应用程序、一个库和一个调用者、客户机和服务器等
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!