当前位置:文档之家› 体系结构设计整理

体系结构设计整理

体系结构设计整理一、名词解释1、软件体系结构概念(3点)高层结构培训让我们一生都不能错过的东西1、组成部分:部件(Component)、连接件(Connector)、配置(Configuration)部件聚集了软件运算与状态,连接件聚集了部件之间的关系部件:在软件的体系架构中封装了数据及其处理操作的元素,提供具体应用服务,定义如下:部件是具有如下特征的架构实体:1)封装了系统中的功能和/或数据的一个子集2)通过清晰定义的接口来限制外界对所封装的子集的访问3)对于被要求执行的上下文有定义明确的依赖关系部件要素:Name、Property、PortCh3 PPT P17连接件:在复杂系统中,交互会比部件范围内的功能实现更重要且更具挑战性,提供独立交互的方法,连接件定义如下:1)连接件是负责引起和约束部件之间交互的构件2)它们起到连接作用,但却不是被连接的对象,只是提供连接的规则Ch3 PPT P24配置:在系统架构中,部件与连接件之间的一个特殊联系的集合,部件与连接件在此特定的组合方式下相互协作完成特定的目标2、关注点软件体系结构对这些关注点进行权衡的过程起到了交流媒介的作用系统质量属性:可靠性、可修改性、性能、安全性、可测试性、可用性项目环境:1)开发:人员技术水平、成本、上市时间、资源2)业务:收益、系统生命周期、市场定位、首次发布日程3)技术:开发平台、硬件设备、开发工具、模型和标准业务目标3、设计决策一个系统的体系架构是有关系统的一系列重要设计决策的集合,体系结构也是一系列对系统设计所做的设计决策,包含了重要的“设计决策”,它们说明了软件体系结构得以形成的“理由”,会指导详细设计、实现等后续软件开发工作设计决策的过程:问题->候选设计->理由->解决方案设计决策的重要性:1、设计决策相互影响,一旦确定便难以改变2、在确定设计决策过程中,极易违背设计规则和约束3、之前废弃的决策难以去除、仍然会影响后来的决策2、4+1View即逻辑视图、开发视图、进程视图、部署视图+ 用例视图,前四个为体系结构视图,后一个为需求视图1)场景视图(Scenarios):定义:关注系统最为重要的需求,描述系统应该实现的场景与用例作用:它们一方面说明软件体系结构设计的出发点,驱动其他4个视图的设计,另一方面用于验证和评估其他4个视图的设计,保证它们的正确性。

用例视图位于4+1视图的中心,被其他4个视图环绕描述:可以用UML的用例图进行描述,其重点在于对用力场景的描述2)逻辑视图Logical view:定义:关注系统的逻辑结构和重要的设计机制,描述系统提供的功能和服务定义:解释系统的逻辑结构和重要的设计机制,其主要内容是软件体系结构的抽象规格,主要关注点是满足用户的各项需求,尤其是功能需求,质量属性需求和约束描述:部件类型用构造型《component》扩展了的类来描述连接件类型用构造型《connector》扩展了的类来描述特征用构造性《property》扩展了的类来描述3)开发视图Development view:定义:关注系统的实现结构,描述系统的开发组织描述:利用UML中的构造型《process》扩展的主动类描述4)进程视图Process view:定义:关注软件体系结构的运行时表现,描述系统的并发进程组织描述:利用UML中的构造型《process》扩展的主动类描述5)部署视图Deployment view:定义:关注系统的基础设施,描述系统的部署于分布描述:使用UML中的部署图描述3、体系结构设计决策一个系统的体系架构是有关系统的一系列重要设计决策的集合定义:设计决策是指决定策略与办法。

是对元素、特征和处理的选择,它们涉及一个活多个关注点,直接或间接的影响到软件体系结构。

设计决策核心的知识可以分为四个部分:关注点,解决方案,策略和理由。

设计决策的重要性:1、设计决策相互影响,一旦确定便难以改变,常见的设计决策间影响有促进、冲突、禁止、包含、从属、依赖等。

2、在确定设计决策过程中,极易违背设计规则和约束3、之前废弃的决策难以去除、仍然会影响后来的决策,而且该影响是不可逆的,即很难消除该影响。

软件体系结构的设计决策是一个持续的过程,每个决策都要在其前面设计决策的基础上进行,要符合前面设计决策所规定的的设计规则和约束,解决自己的特定问题和关注点。

但是所有设计决策都要遵守概念完整性,保证所有设计决策之间相互协调并且与整个系统目标相协调。

4、GRASP模式GRASP,即通用的职责分配软件模式(General Responsibility Assignment Software Patterns)包含以下内容:1) 低耦合:分配职责时保证低耦合,即降低依赖并增加复用性2) 高内聚:将复杂度控制在可管理范围之内。

不可能完全消除时序内聚、过程内聚、通信内聚,必须将这些内聚的拥有者变成转发者。

一个对象仅实现单一的职责,而不实现复杂的职责组合3) 专家模式:信息的封装。

分配职责要看对象所拥有的信息,谁拥有哪方面的信息,谁就负责哪方面的职责,并且一个对象只做这一件事情4) 创建者模式:如果某个对象与其他对象已经有聚合/包含关系,则这个对象应该由聚合/包含它的对象来创建。

这样就不需要依赖第三方,不会增加新的耦合。

如果符合下面的一个或多个条件,创建A类的职责将会分配给B类:B类聚合A类的对象B类包含A类的对象B类记录A类对象的实例B类密切使用A类对象B类包含A类初始化所需信息5) 控制者模式:对象协作设计中的一种风格,解决“处理系统事件”这一职责的分配问题。

将处理系统时间信息的职责分配个代表其中一个选择的类1. 如果一个程序可以接收外部事件(如GUI事件):处理模块之间加一个事件管理模块,从而将这二者解耦:业务或组织、代表整个系统的类、完成业务的活跃对象、虚构类2. 控制者(可以是外观控制者,或者一个纯虚构对象):接受所有的外界请求并转发,很可能形成集中式风格3. Controller肯定会跟两边对象都有很严重的耦合,并且由于它负责转发很多信息,所以它的内聚度不高6) 多态模式:当对象的行为由其类型决定时,需要使用多态的方法调用,而不是通过if/else语句来做选择。

7) 纯虚构模式:为了实现高内聚低耦合,将一组内聚性很高的职责分配给一个完全抽象的类,这个类在问题域中没有任何意义经典场景:分离模型的表示分离模型的实现平台分离复杂行为分离复杂数据结构8) 间接模式:为了防止直接耦合,将职责分配给一个中介对象用于部件与服务之间的交互常见Indirection方法:Pipe/Event/Share Data Styles;Adapter Pattern;Proxy Pattern;Broker Pattern;Delegator Pattern;Mediator Pattern;Publish-Subscribe or Observer pattern9) 保护差异模式:对于将来可能发生的变化,由稳定的接口来承担对象的访问职责二、软件设计的审美标准1、设计的审美标准包括:1) 简洁性(模块化):结构清晰2) 结构一致性(概念完整性):3) 坚固性(高质量:易开发、易修改、易复用、易调试、易维护、易理解)2、软件设计方法与技术(至少5点)1) 模块化:进行模块划分,隐藏一些程序片段(数据结构和算法)的实现细节,暴露接口与外界;且保证模块内部的内聚度较高,模块与外界的耦合较低。

模块隐藏实现细节,通过接口访问模块,因此促进了简洁性;且因为功能内聚,对外提供统一的外部接口,因此促进了结构一致性2) 信息隐藏:将系统分成模块,每个模块封装一个重要决策,且只有该模块知道实现细节。

决策类型可以是需求、变更,不同的决策之间相互独立。

信息隐藏和模块化都在一定程度上促进了简洁性,隐藏为了处理一些不需要对外表现的决策段分割,这又在一定程度上牺牲了简洁性而达到了坚固性3) 运行时注册:针对系统变化,将可能变化的部分与其他部分解耦,不直接发生程序调用,而是在运行时注册。

因为这个技术针对可能的变更而使用,本来可以用一个部件处理的事情,却需要多个部件一同完成,产生了复杂的交互规则,所以牺牲了简洁性,以提高坚固性(灵活性)4) 配置式编程:针对系统变化,主要解决共性与差异性问题。

将可能变化的部分写在一个配置文件中,当要发生变化时,直接修改配置文件。

因为需要充分考虑可能的变更来组织配置文件,并且需要在系统启动时对配置文件进行解析,所以牺牲了简洁性,以提高坚固性(灵活性)5) 设计模式:设计模式牺牲简洁性达到坚固性,保证程序的可维护性和可扩展性。

同时在设计模式中是讲究用同样的方法做同样的事,促进了程序结构的一致性6) 体系结构风格:体系结构风格封装了一个设计机制,说明了体系结构中的重要设计决策,并且说明了与此相对应的设计约束。

体系结构风格促进了系统的一致性;由于体系结构风格有助于做好系统的高层设计,控制系统复杂度,因此促进了系统的坚固性。

7) 职责分配GRASP:促进了坚固性,一致性,有时牺牲简洁性8) 协作设计:促进了坚固性,但有时会牺牲简洁性易理解性,例如Mediator和Controller 中会涉及大量复杂交互二、设计的层次a) 高层设计1) 出发点:弥补详细设计机制的不足,将一组模块组合起来形成整个系统,进行整体结构设计。

同时,体系结构也是一系列对系统设计所做的设计决策2) 主要关注因素:项目环境,包括开发环境、业务环境、技术环境;业务目标。

为了达成以上目标,要求体系结构满足简洁性、一致性、坚固性3) 主要方法与技术:1. 方法:4+1 view、场景驱动、体系结构风格2. 技术:模块的表示方法可以是box-line、formal language(ADL,架构描述语言)UML(4+1 view模式使用UML技术实现)4) 最终制品:体系结构b) 中层设计1) 出发点:模块与类结构设计;模块划分,做到接口抽象与实现的分离,隐藏实现细节(数据结构和算法),对外提供接口;模块之间尽可能独立,实现单个模块高内聚,模块之间低耦合2) 主要关注因素:简洁性(易开发、易修改、易复用);可观察性“看上去显然是正确的”(易开发,易调试,易维护);高内聚,低耦合;3) 主要方法与技术:1. 模块化(模块划分+内聚/耦合标准):低耦合(将模块之间的关系最小化)高内聚(将模块之内的各个方法之间的联系最大化)2. 信息隐藏(模块化+可修改性):一个模块只封装一个secret(主要秘密是需求决策,次要秘密是修改决策)而且只有自己知道决策细节,决策有需求决策、修改决策3. 面向对象:结合模块化和信息隐藏的方式,再加上封装、继承、多态等技术,进行面向对象的设计4) 最终制品:模块与类结构c) 低层设计1) 出发点:将基本的语言单位(类型与语句)组织起来,建立高质量的数据结构和算法(数据结构合理易用,算法可靠、高效、易读)的实现细节2) 主要关注因素:数据结构与算法的简洁性(易读)3) 主要方法与技术:防御式编程,断言式编程,测试驱动开发,异常处理,配置式编程,表驱动编程,基于状态机编程4) 最终制品:算法与数据结构,单个的函数三、体系结构风格1、描述和比较各种风格1)体系结构风格分为4个levelObject Level:Design PatternsModule Level:Process Level:Physical Unit Level:1、模块级别1、主程序、子路径风格:部件从其父部件当中得到控制信息,绝不向其同级或上级发出调用信息。

相关主题