第2章软件体系结构风格1-经典风格_第1页
第2章软件体系结构风格1-经典风格_第2页
第2章软件体系结构风格1-经典风格_第3页
第2章软件体系结构风格1-经典风格_第4页
第2章软件体系结构风格1-经典风格_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、13.1 经典的软件体系结构风格3.2 C/S、B/S类架构3.3 分布式对象技术3.4 其他软件体系结构风格风格是带有倾向性的模式。针对同一个问题,可以有不风格是带有倾向性的模式。针对同一个问题,可以有不同的解决方案或模式,但我们根据经验和问题特征,通同的解决方案或模式,但我们根据经验和问题特征,通常会强烈倾向于采用特定的模式,这就是风格常会强烈倾向于采用特定的模式,这就是风格在很多工程领域,基于模式和设计风格的开发方法是非在很多工程领域,基于模式和设计风格的开发方法是非常普遍的,一个设计良好的通用模式是一个工程领域技常普遍的,一个设计良好的通用模式是一个工程领域技术成熟的标志之一术成熟的标

2、志之一234567891011describes a class of architectures描述了一类建筑的总体结构描述了一类建筑的总体结构is found repeatedly in practice在实践中被多次设计、应用在实践中被多次设计、应用is a package of design decisions是若干设计思想的综合是若干设计思想的综合has known properties that permit reuse具有已经被熟知的特性,并且可以复用具有已经被熟知的特性,并且可以复用ths same to Software Architecture12软件体系结构设计的一个核心

3、问题是:软件体系结构设计的一个核心问题是: = 能否使用重复的体系结构模式能否使用重复的体系结构模式 = 能否达到体系结构级的软件重用能否达到体系结构级的软件重用 = 能否在不同的软件系统中使用同一个体系结构能否在不同的软件系统中使用同一个体系结构软件体系结构风格是描述某一特定应用领域中,系统组软件体系结构风格是描述某一特定应用领域中,系统组织方式的惯用模式织方式的惯用模式 (idiomatic paradigm),反映了该领反映了该领域中众多系统所共有的结构和语义特性,并指导如何将域中众多系统所共有的结构和语义特性,并指导如何将各个模块或子系统有效的组织成一个完整的系统各个模块或子系统有效的

4、组织成一个完整的系统13数据抽象和面向对象的组织结构数据抽象和面向对象的组织结构事件驱动和隐式调用事件驱动和隐式调用分层系统(分层系统(OSI七层协议)七层协议)C/S, B/S14一个体系结构风格定义一个一个体系结构风格定义一个词汇表词汇表和一组和一组约束约束: 词汇表中包含一些构件(如客户机、服务器、层、数据库等)和词汇表中包含一些构件(如客户机、服务器、层、数据库等)和连接件(如过程调用、事件消息、协议等)类型连接件(如过程调用、事件消息、协议等)类型 这组约束指出系统是如何将这些构件和连接件组合起来的这组约束指出系统是如何将这些构件和连接件组合起来的此外,一个体系结构风格还包括:此外,

5、一个体系结构风格还包括: 一套一套语义解释规则语义解释规则,说明构件和连接件的组装是具有良定义的实,说明构件和连接件的组装是具有良定义的实际意义的;际意义的; 对基于这种风格的软件系统所进行的对基于这种风格的软件系统所进行的分析方法分析方法15构件和连接件的类型是什么?构件和连接件的类型是什么?可容许的结构模式(包括构件、连接件、约束)可容许的结构模式(包括构件、连接件、约束)是什么?是什么?风格的基本不变性是什么?风格的基本不变性是什么?其使用的常见例子是什么?其使用的常见例子是什么?使用此风格的优缺点是什么?使用此风格的优缺点是什么?是否存在使用多种风格的软件系统?是否存在使用多种风格的软

6、件系统?1617每个构件(称为过滤器)都有一组输入和输出,构件从每个构件(称为过滤器)都有一组输入和输出,构件从输入源读入数据流,并在输出池产生输出数据流,构件输入源读入数据流,并在输出池产生输出数据流,构件对输入流进行内部转换和增量计算,因此在输入数据流对输入流进行内部转换和增量计算,因此在输入数据流被全部处理之前,输出就已经开始了被全部处理之前,输出就已经开始了这种风格的连接件就象是数据流传输的管道,将一个过这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入滤器的输出传到另一过滤器的输入18过过滤滤器器管管道道19过滤器是独立运行的构件过滤器是独立运行的构件 过

7、滤器之间不共享状态过滤器之间不共享状态 过滤器自身无状态过滤器自身无状态过滤器对其处理上下连接的过滤器过滤器对其处理上下连接的过滤器“无知无知” 仅需要对输入管道的输入数据流进行限制,并保证输出仅需要对输入管道的输入数据流进行限制,并保证输出管道的输出数据流有适合的内容,对相邻过滤器的实现管道的输出数据流有适合的内容,对相邻过滤器的实现细节不施加任何限制细节不施加任何限制最终输出的正确性不依赖于过滤器运行的次序最终输出的正确性不依赖于过滤器运行的次序 各过滤器在输入具备后完成自己的计算,完整的计算过各过滤器在输入具备后完成自己的计算,完整的计算过程包含在过滤器之间的拓扑结构中程包含在过滤器之间

8、的拓扑结构中使得软构件具有高内聚、低耦合、易理解的特点,允许使得软构件具有高内聚、低耦合、易理解的特点,允许设计者将整个系统的输入设计者将整个系统的输入/输出行为看成是多个过滤器的输出行为看成是多个过滤器的行为的简单合成行为的简单合成支持构件重用,只要提供适合在两个过滤器之间传送的支持构件重用,只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来数据,任何两个过滤器都可被连接起来系统维护和增强系统性能简单,新的过滤器可以添加到系统维护和增强系统性能简单,新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉现有系统中来;旧的可以被改进的过滤器替换掉允许对一些如吞吐量、死

9、锁等属性的分析允许对一些如吞吐量、死锁等属性的分析支持并行执行,每个过滤器是作为一个单独的任务完成支持并行执行,每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行,因此可与其它任务并行执行21导致过滤器的处理过程包含只能批量执行的若干操作。导致过滤器的处理过程包含只能批量执行的若干操作。这是因为,过滤器是独立的,设计者必须将每个过滤器这是因为,过滤器是独立的,设计者必须将每个过滤器看成一个完整的输入到输出的转换,而不能将其中的操看成一个完整的输入到输出的转换,而不能将其中的操作分解作分解不适合处理交互的应用,当需要增量地显示改变时,这不适合处理交互的应用,当需要增量地显示改变时,这个

10、问题尤为严重个问题尤为严重因为在数据传输上没有通用的标准,每个过滤器都增加因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性,并增加了编写过滤器的复杂性2223对对象象抽抽象象数数据据类类型型过过程程调调用用对对象象对对象象对对象象对对象象这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的因为一个对象对其它对象隐藏了它的具体实现,所以可因为一个对象对其它对象隐藏了它的具体实现,所以可

11、以改变一个对象的实现,而不影响其它的对象以改变一个对象的实现,而不影响其它的对象继承、封装、多态继承、封装、多态为了使一个对象和另一个对象通过过程调用等进行交互为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象就必须修改所有其他明确调用它的对象必须修改所有显式调用它的其它对象,并消除由此带来必须修改所有显式调用它的其它对象,并消除由此带来的一些副作用。例如,如果的一些副作用。例如,如果A使用了对象使用了对象B,C也使用了也使用了对象对象B,那么,那么,C对对B的使用所造

12、成的对的使用所造成的对A的影响可能是的影响可能是料想不到的料想不到的2425按层次结构组织软件系统,每一层为上层服务,并作为按层次结构组织软件系统,每一层为上层服务,并作为下层客户,内部的层只对相邻的层可见下层客户,内部的层只对相邻的层可见交互只在相邻的层间发生,同时,这些交互按照一定的交互只在相邻的层间发生,同时,这些交互按照一定的协议进行,连接件可以用层次间的交互协议来定义协议进行,连接件可以用层次间的交互协议来定义这种风格允许将一个复杂问题分解成一个增量步骤序列这种风格允许将一个复杂问题分解成一个增量步骤序列的实现。由于每一层最多只影响两层,同时只要给相邻的实现。由于每一层最多只影响两层

13、,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持为软件重用提供了强大的支持2627支持基于抽象程度递增的系统设计,使设计者可支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解以把一个复杂系统按递增的步骤进行分解支持功能增强,因为每一层至多和相邻的上下层支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层交互,因此功能的改变最多影响相邻的上下层支持重用,只要提供的服务接口定义不变,同一支持重用,只要提供的服务接口定义不变,同一层的不同实现可以交换使用

14、。这样,就可以定义层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法一组标准的接口,而允许各种不同的实现方法28并不是每个系统都可以很容易地划分为分层的模并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来些低级或高级的功能综合起来不必要的工作:如果低层执行的某些服务执行了不必要的工作:如果低层执行的某些服务执行了多余或重复的工作,而这些工作并非是高层需要多余或重复的工作,而这些工

15、作并非是高层需要的,那么这对性能的影响是负面的的,那么这对性能的影响是负面的29构件不直接调用一个过程,而是触发或广播一个或多个构件不直接调用一个过程,而是触发或广播一个或多个事件。其他构件中的过程在一个或多个事件中注册,当事件。其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册了的一个事件被触发,系统自动调用在这个事件中注册了的所有过程,这样,一个事件的触发就导致与其相关联的所有过程,这样,一个事件的触发就导致与其相关联的所有过程的隐式调用所有过程的隐式调用这种风格的主要特点是事件的触发者并不知道哪些构件这种风格的主要特点是事件的触发者并不知道哪些构件会被

16、这些事件影响。这样,不能假定构件的处理顺序,会被这些事件影响。这样,不能假定构件的处理顺序,甚至不知道哪些过程会被调用,因此,许多隐式调用的甚至不知道哪些过程会被调用,因此,许多隐式调用的系统也包含显式调用作为构件交互的补充形式系统也包含显式调用作为构件交互的补充形式3031IDE中的调试系统中的调试系统当调试器在断点处停下后,它会发布一个事件,驱动已当调试器在断点处停下后,它会发布一个事件,驱动已注册到该事件上的过程的自动执行,如:编辑器滚动到注册到该事件上的过程的自动执行,如:编辑器滚动到相应的代码行,变量监视器显示最新的变量值等相应的代码行,变量监视器显示最新的变量值等思考:哪些类型的事

17、件会采用隐式调用的方式处理?思考:哪些类型的事件会采用隐式调用的方式处理?为软件重用提供了强大的支持:将一个构件加入现存系为软件重用提供了强大的支持:将一个构件加入现存系统中时,只需将它注册到系统的事件中;用一个构件代统中时,只需将它注册到系统的事件中;用一个构件代替另一个构件时,不会影响到其它构件的接口替另一个构件时,不会影响到其它构件的接口构件放弃了对系统计算的控制。一个构件触发一个事件构件放弃了对系统计算的控制。一个构件触发一个事件时不能确定其它构件是否会响应它。而且,即使它知道时不能确定其它构件是否会响应它。而且,即使它知道事件被哪些构件中的过程所注册,它也不能保证这些过事件被哪些构件

18、中的过程所注册,它也不能保证这些过程被调用的顺序程被调用的顺序数据交换的问题。有时数据可被一个事件传递,但另一数据交换的问题。有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。在这些情况下,全局性能和资源管理便成了问行交互。在这些情况下,全局性能和资源管理便成了问题题32 在黑板风格中,有两在黑板风格中,有两种不同的构件:种不同的构件:黑板数据结构黑板数据结构,代表系,代表系统当前状态;统当前状态;知识源知识源,是独立构件,是独立构件,只通过黑板进行交互;只通过黑板进行交互;控制器控制器,完全由黑板的,完全由

19、黑板的状态驱动,一旦黑板的状态驱动,一旦黑板的状态使某个知识源可用状态使某个知识源可用,知识源就会适时响应,知识源就会适时响应33黑黑板板(共共享享数数据据)知知识识源源知知识识源源知知识识源源知知识识源源计计算算内内存存直直接接存存取取知识源的调用是通过黑板的状态激活的,因此,知识源的调用是通过黑板的状态激活的,因此,实际的控制器或者实现在知识源中,或者实现在实际的控制器或者实现在知识源中,或者实现在黑板系统中,或者两者兼之黑板系统中,或者两者兼之黑板风格类似于这样一种情形:有一群类似老师黑板风格类似于这样一种情形:有一群类似老师的人会在黑板上记录下自己的想法或者对某件事的人会在黑板上记录下

20、自己的想法或者对某件事情的看法,老师同时可以对黑板上的不正确的东情的看法,老师同时可以对黑板上的不正确的东西进行改进,从而不断更新黑板上的东西西进行改进,从而不断更新黑板上的东西34便于多客户共享大量数据,他们不用关心数据时便于多客户共享大量数据,他们不用关心数据时何时出现的、由谁怎样提供的何时出现的、由谁怎样提供的既便于添加新的作为知识源的应用程序,又便于既便于添加新的作为知识源的应用程序,又便于扩展共享的黑板数据结构扩展共享的黑板数据结构可重用的知识源可重用的知识源需要同步锁机制保证黑板数据结构的完整一致性需要同步锁机制保证黑板数据结构的完整一致性测试困难、低效、开发成本高测试困难、低效、

21、开发成本高35模型模型 - 视图视图 - 控制器控制器 (model-view-controller)强调将用户输入、数据处理、数据表示方式分开强调将用户输入、数据处理、数据表示方式分开设计,一个交互式应用系统由设计,一个交互式应用系统由模型模型、视图视图和和控制控制器器等等3个部件组成,分别对应于内部数据处理部个部件组成,分别对应于内部数据处理部分、数据表示部分、输入分、数据表示部分、输入/输出控制部分输出控制部分 363738封装了核心功能和数据封装了核心功能和数据 业务逻辑(软件的核心)业务逻辑(软件的核心) 数据以及访问它们的函数(视图组件使用)数据以及访问它们的函数(视图组件使用)

22、执行特定应用程序处理的过程(控制器代表用户调用)执行特定应用程序处理的过程(控制器代表用户调用)模型对于用户来说是不可见的模型对于用户来说是不可见的(M与与C独立独立)模型独立于特定输出表示或者输入方式模型独立于特定输出表示或者输入方式(M与与V独立独立)用户只能通过控制器操作模型用户只能通过控制器操作模型(C是是M与与V之间的桥梁之间的桥梁)39向用户显示信息向用户显示信息 不同的视图使用不同的方法呈现信息不同的视图使用不同的方法呈现信息 每个视图组件都有一个更新函数,这个函数被模型变更每个视图组件都有一个更新函数,这个函数被模型变更通知激活,使得视图重新和模型一致通知激活,使得视图重新和模

23、型一致 在初始化阶段,视图向模型登记请求变更通知在初始化阶段,视图向模型登记请求变更通知从模型获得数据从模型获得数据 通过状态查询函数实现通过状态查询函数实现 例如:定时刷新例如:定时刷新40每个视图有一个相关的控制器组件每个视图有一个相关的控制器组件(一一对应一一对应)控制器组件接受事件,并翻译成输入控制器组件接受事件,并翻译成输入 事件如何发送到控制器由用户界面平台决定事件如何发送到控制器由用户界面平台决定 事件被翻译成为对模型或者视图的请求事件被翻译成为对模型或者视图的请求 如果控制器的行为依赖于模型的状态,那么控制器也需如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变

24、更通知要向模型登记请求变更通知用户仅仅通过控制器与系统交互用户仅仅通过控制器与系统交互41一个模型可对应多个视图(维护数据的一致性)一个模型可对应多个视图(维护数据的一致性) 如果用户通过一个视图的控制器改变了模型中的数据,如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化那么依赖于该数据的其他视图也应该反映出这样的变化 一旦模型的数据发生了变化,模型需要通知所有相关的一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化视图做出相应的变化工作原理工作原理 模型维护了一个表,所有视图还有一些控制器在这个表模型维护了一个表,所有视图还有一些控制器在这个表中登记了对变更通知的需求中登记了对变更通知的需求 模型状态的改变将触发变更模型状态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论