功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。
顺序内聚:处理元素相关,而且必须顺序执行。
通信内聚:所有处理元素集中在一个数据结构的区域上。
过程内聚:处理元素相关,而且必须按特定的次序执行。
瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行。
逻辑内聚:完成逻辑上相关的一组任务。
偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务。
敏感点和权衡点是关键的架构决策。
敏感点:是一个或多个构件的特性。研究敏感点可使设计人员或分析员明确在搞清楚如何实现质量目标时应该注意什么。如:对查询请求处理时间的要求将影响系统的数据传输协议和处理过程的设计(一个质量属性会对多个设计决策造成影响,是敏感点)。
权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点。如:更改系统加密的级别将对安全性和性能产生影响(一个质量属性会影响多个质量属性,是权衡点)。
结构图(静态图) | 类图 | 一组类、接口、协作和它们的关系 |
对象图 | 一组对象及它们之间的关系 | |
构件图 | 一个封装的类和它的接口 | |
部署图 | 软硬件之间映射 | |
制品图 | 系统的物理结构图 | |
包图 | 由模型本身分解而成的组织单元,以及它们之间的依赖关系 | |
组合结构图 | ||
行为图(动态图) | 用例图 | 系统与外部参与者的交互 |
顺序图 | 强调按时间顺序 | |
通信图(协作图) | ||
状态图 | 状态转移变迁 | |
活动图 | 类似流程图,并行行为 | |
定时图 | 强调实际时间 | |
交互概览图 |
逻辑视图:主要支持系统的功能需求,即系统提供给最终用户的服务。一般用类图、对象图,活动图、状态图描述。
开发视图:开发视图也称为模块视图,在UML中被称为实现视图,它主要侧重于软件模块的组织和管理。该视图可以描述源代码,系统文件结构,一般用包图、组件图描述。
进程视图:进程视图侧重于系统的运行特性,主要关注一些非功能性需求,列如,系统的性能和可用性等。进程视图强调并发性、分布性、系统集成性和容错能力,以及逻辑视图中的功能抽象如何适合进程结构等,它也定义了逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。
物理视图:在UML中被称为部署视图,它主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结构、系统安装和通信问题。当软件运行于不同的物理节点上时,各视图中的构件都直接或间接地对应于系统地不同节点上。因此,从软件到节点地映射要有较高地灵活性,当环境改变时,对系统其他视图地影响最小化。
场景:可以看作时那些重要系统活动地抽象,它使四个视图有机联系起来,从某种意义上说场景是最重要地需求抽象。场景视图对应UML中地用例视图。
只有5个视图结合在一起才能反映系统的体系结构的全部内容。
静态测试:指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析地手段对程序进行检测。静态测试方法能够有效地发现30%~70%的逻辑设计和编码错误。包括:
动态测试:利用计算机运行得到测试结果的方式进行测试。如黑盒测试。
MVC用一种业务逻辑、数据、界面分离的方法组织代码,将业务逻辑聚集到一个构件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
模型(model):负责提供操作数据对象
视图(view):负责提供用户操作界面
控制器(control):负责按照输入指令和业务逻辑操作数据对象,并产生输出
EJB构件中的Bean按照其功能可以分为:
Session Bean(会话构件):负责处理客户与服务端交互的业务逻辑;
Entity Bean(实体构件):表示数据库中存在的业务实体;
Message Driven Bean(消息驱动构件):用于接收异步JMS消息。
数据访问层常见的访问方式有五种:
响应式web设计(Responsive Web Design)的理念是:页面的设计于开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。无论用户正在使用笔记本计算机还是iPad,页面都应该能够自动切换分辨率、图片尺寸以及相关脚本功能等,以适应不同设备;及页面应该有能力去自动响应用户的设备环境。响应式网页设计就是一个网站能兼容多个终端,而不是为每个终端做一个特定的版本,减小为不断到来的新设备做专门的版本设计和开发的工作量。
响应式web设计具体的实现方式包括媒体查询(Media Query)、流式布局(弹性布局、动态布局)、液态图片(弹性图片)等。
面向对象设计的基本任务是把面向对象分析模型转换为面向对象设计模型。
面向对象分析模型主要由顶层架构图、用例图、领域概念模型构成。
设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和描述流程化处理过程的活动图。
架构风格名 | 常考关键字及实例 | 简介 | |
---|---|---|---|
数据流风格 | 批处理 | 传统编译器每个阶段产生的结果作为下一个阶段的输入,区别在于整体 | 一个接一个,以整体为单位 |
管道/过滤器 | 一个接一个,前一个输出是后一个输入 | ||
调用/返回风格 | 主程序/字程序 | 显示调用,主程序直接调用子程序 | |
面向对象 | 对象是构件,通过对象调用封装的方法和属性 | ||
层次结构 | 分层,每层最多影响其上下两层,有调用关系 | ||
客户机/服务器 | |||
独立部件风格 | 进程通信 | 进程对立的消息传递,异步调用 | |
事件驱动(隐式调用) | 事件触发推动动作,如程序语法高亮,语法错误提示 | 不直接调用,通过事件驱动 | |
虚拟机风格 | 解释器 | 自定义流程,按流程执行,规则随时改变,灵活定义,业务灵活组合。机器人 | 解释自定义的规则,解释引擎,存储数据结构 |
基于规则的系统 | 规则集,规则解释器,选择器和工作内存,用于DDS和人工智能,专家系统 | ||
数据共享风格 (仓库) |
数据库系统 | 现代编译器的集成开发环境IDE,以数据为中心,又称为数据共享风格 | 中央共享数据源,独立处理系统 |
超文本 | 网状链接,多用于互联网 | ||
黑板系统 | 语音识别,知识推理等复杂问题,解空间很大,求解过程不确定的这一类软件系统。黑板、知识源、控制 | ||
闭环-过程控制 | 汽车巡航定速,空调温度调节,设定参数,并调整 | 发出控制命令并接受反馈,循环往复,达到平衡 | |
C2风格 | 构件和连接件,顶部和底部 | 通过连接件绑定在一起,按照一组规则运作的并行构件网络 |
1、管道过滤器
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
2、数据抽象和面向对象
建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中
3、基于事件的隐式调用
思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中的过程的调用。而事件的触发者并不知道哪些构件会被这些事件影响。
4、分层系统
层次系统组成一个层次结构,每一层为上层服务,并作为下层客户。
5、仓库系统及知识库
6、C2风格
7、客户机/服务器风格
C/S体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络
8、三层C/S结构风格
两层C/S结构是单一服务器且以局域网为中心的,所以难以扩展至大型企业广域网,Internet软硬件的组合及集成能力有限,客户机的负荷太重,难以管理大量的客户机,系统的性能容易变坏,数据安全性不好。
三层C/S体系结构是将应用功能分成表示层、功能层和数据层三个部分,削弱二层C/S结构的局限性。
9、浏览器/服务器风格
浏览器/服务器风格就是三层C/S结构的一种实现方式,具体结构为浏览器/Web服务器/数据库服务器。
1、操作性需求:指系统完成任务所需的操作环境要求,以及如何满足系统将来可能的需求变更的要求。(技术环境需求,系统集成需求,可移植性需求,维护性需求)
2、性能需求:针对系统性能要求的指标,如吞吐率,响应时间和容量等。(速度需求,容量需求,可信需求 )
3、安全性需求:指为防止系统崩溃和保证数据安全所需要采取的保护措施的要求,为系统提供合理的预防措施。(系统价值需求,访问控制需求,加密认证需求,病毒控制需求)
4、文化需求,指使用本系统的不同用户群体对系统提出的特有要求。(多语言要求,个性化定制需求,规范性描述需求,法律需求)
面向服务的体系架构(SOA)
企业服务总线(ESB)
是由中间件技术实现地全面支持面向服务架构地基础软件平台,支持异构环境中地服务以及基于消息和事件驱动模式地交互,并且具有适当地服务质量可管理性。
1、基于调查问卷的评估方法
2、基于度量的评估方法
3、基于场景的分析方法
SAAM(Scenarios-based Architecture Analysis Method)基于场景地架构分析方法,是一种非功能质量属性的体系架构分析方法,最初用于比较不同的体系架构,分析架构的可修改性,后来也用于其他的质量属性,如可移植性、可扩展性等。
(1)、特定目标:对描述应用程序属性的文档,验证基本体系结构假设和原则。SAAM不仅能够评估体系结构对于特定系统需求的适应能力,也能被用来比较不同的体系结构。
(2)、评估活动:SAAM的过程包括五个步骤,及场景开发、体系结构描述、单个场景评估、场景交互和总体评估。
ATAM(Architecture Tradeoff Analysis Method)体系结构权衡分析方法,是在SAAM的基础上发展起来的,主要针对性能、实用性、安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中。
(1)特定目标:在考虑多个质量属性相互影响的情况下,从原则上提供一种理解软件体系结构的能力的方法,使用该方法确定在多个质量属性之间折中的必要性。
(2)评估活动:分为四个主要的活动领域,分别是场景和需求收集、体系结构视图和场景实现,属性模型构造和分析、折中。
(1)性能。
性能是指系统的响应能力,即需要多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件个数。经常用单位时间内所处理事务的数量或系统完成某个事务处理所需的时间来对性能进行定量表示。
(2)可用性。
可用性是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
(3)安全性。
安全性是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。
(4)可修改性。
可修改性是指能够快速地以较高地性能价格比对系统进行表更地能力,包括可维护性、可扩展性、结构重构、可移植性。
(5)可靠性。
可靠性是指用户在错误操作,或者意外操作情况下,系统仍然能保持基本功能的能力。
(6)易用性。
易用性是指衡量一个用户在系统上完成指定功能的操作难易程度。
(7)风险点、敏感点、权衡点
风险点:在架构设计中,某个架构决策有潜在问题所带来得隐患
敏感点:为了实现某种架构质量属性,会给一个或多个架构设计决策带来影响
权衡点:为了实现某种质量属性,会给一个或多个质量属性造成影响,并且这一个或多个质量属性都是风险点
软件开发方法 | 特点 |
结构化法 | 1、用户至上 2、严格区分工作阶段、每个阶段有任务与成果 3、强调系统开发过程的整体性和全局性 4、系统开发过程工程化,文档资料标准化 5、自顶向下,逐步分解(求精) |
原型法 | 1、适用于需求不明确的开发 2、包括抛弃型原型和进化型原型 |
面向对象方法 | 1、更好的复用性 2、关键在于建立一个全面、合理、统一的模型 3、分析、设计、实现三个阶段,界限不明确 |
面向服务的方法 | 1、soa方法有三个抽象级别:操作、服务、业务流程 2、soa分为三个层次:基础设计层、应用构件层、业务组织层 3、服务建模:分为服务发现、服务规约和服务实现 |
设计模式分类 | 设计模式 | 速记点 | 主要特点 |
创建型模式 | 工厂方法(Factory Method) | 动态产生对象 | 定义一个创建对象的接口,但由子类决定需要实例化哪个类。 |
抽象工厂(Abstract Factory) | 生产成系列对象 | 提供一个接口,可创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 | |
原型(Prototype) | 克隆对象 | 用原型实列指定创建对象的类型,并且通过拷贝这个类型来创建新的对象。Java中的Object clone()方法 | |
构建器(Builder) | 复杂对象构造 | 将一个复杂类的表示与其构造分离,使得相同的构建过程能够得出不同的表示。 | |
单例模式(Singleton) | 单实例 | 保证一个类只有一个实例,并提供一个访问它的全局访问点。 | |
结构型模式 | 适配器(Adapter) | 转换接口 | 将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作。JDBC |
桥接(Bridge) | 继承树拆分 | 将类的抽象部分和它的实现部分分离开来,使他们可以独立的变化。 | |
组合(Composite) | 树形目录结构 | 将对象组合成树形结构以表示整体-部分的层次结构,使得用户对单个对象和组合对象的使用具有一致性 | |
装饰(Decorator) | 动态附加职责 | 动态给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。JDK中的IO流 | |
外观(Facade) | 对外统一接口 | 定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用 | |
享元(Flyweight) | 汉字编码 | 提供支持大量细粒度对象共享的有效方法。数据库连接池 | |
代理(Proxy) | 快捷方式 | 为其他对象提供一种代理以控制这个对象的访问。Spring AOP中,对象实现了接口用JDK代理,没有则用CGLib代理 | |
行为型模式 | 责任链(Chain of Responsibliity) | 传递职责 | 通过给多个对象处理请求的机会,减少请求的发送者与接收者之间地耦合。将接受对象链接起来,在链中传递请求,直到有一个对象处理这个请求。 |
命令(Command) | 日志记录、可撤销 | 将一个请求封装为一个对象,从而可以用不同地请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销地操作。 | |
解释器(Interpreter) | 虚拟机地机制 | 给定一种语言,定义它地文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中地句子 | |
迭代器(Iterator) | 数据集 | 提供一种方法来顺序访问一个聚合对象中地各个元素,而不需要暴露该对象地内部表示 | |
中介者(Mediator) | 不直接引用 | 用一个中介对象来封装一系列地对象交互。它使各个对象不需要显示地相互调用,从而达到低耦合,还可以独立地改变对象间地交互 | |
备忘录、快照(Memento) | 游戏存档 | 在不破坏封装地前提下,捕获一个对象地内部状态,并在该对象之外保存这个状态,从而可以以后将该对象恢复到原先保存地状态 | |
观察者(Observer) | 联动 | 定义对象间地一种一对多地依赖关系,当一个对象地状态发生改变时,所有依赖于它地对象都得到通知并自动更新。 | |
状态(State) | 状态变成类 | 允许一个对象在其内部状态改变时改变它地行为 | |
策略(Strategy) | 多方案切换 | 定义一系列算法,把它们一个个封装起来,并且使他们之间可以相互替换,从而让算法可以独立于使用它地用户而变化 | |
模板方法(Template Method) | 框架 | 定义一个操作中地算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法地结构即可重新定义算法地某些特定步骤 | |
访问者(Visitor) | 数据于操作分离 | 表示一个作用于某对象结构中地各个元素地操作,使得在不改变各个元素地前提下定义作用于这些元素地新操作。 |