概述
- 从需求分析到软件设计之间的过渡过程称为软件架构
- 架构设计就是需求分配,将满足需求的职责分配到组件上
- 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成
- 软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理
- 解决好软件的复用、质量和维护问题是研究软件架构的根本目的
- 软件架构设计包括提出架构模型,产生架构设计和进行设计评审等活动,是一个迭代的过程
- 架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构
- 软件架构能够在设计变更相对容易的阶段,考虑系统结构的可选方案,便于技术人员和非技术人员就软件设计进行交互,能够展现软件的结构、属性与内部交互关系
- 软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性
- 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
- 软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量
构件
- 构件是一个独立可交付的功能单元,外界通过接口访问其提供的服务
- 构件由一组通常需要同时部署的原子构件组成
- 一个原子构件是一个模块和一组资源
- 原子构件是部署、版本控制和替换的基本单位
- 原子构件通常成组地部署,但是它也能够被单独部署
- 构件和原子构件之间的区别在于:大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族
- 一个模块是不带单独资源的原子构件
- 一个单独的包被编译成多个单独的类文件
- 模块是一组类和可能的非面向对象的结构体,比如过程或者函数
特性
一个构件可以包含多个类元素,但是一个类元素只能属于一个构件
- 独立部署单元
- 作为第三方的组装单元
- 没有(外部的)可见状态
对象特性
- 一个实例单元,具有唯一的标志
- 可能具有状态,此状态外部可见
- 封装了自己的状态和行为
构件接口
接口标准化是对接口中消息的格式、模式和协议的标准化。它不是要将接口格式化为参数化操作的集合,而是关注输入输出的消息的标准化,它强调当机器在网络中互连时,标准的消息模式、格式、协议的重要性
面向构件编程 COP
关注于如何支持建立面向构件的解决方案。面向构件编程需要下列基本的支持
- 多态性(可替换性)
- 模块封装性(高层次信息的隐藏)
- 后期的绑定和装载(部署独立性)
- 安全性(类型和模块安全性)
构件标准
构件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的**细节进行了封装,同时对各种业务逻辑规则进行了实现
**,用于处理用户的内部操作细节。常用的构件标准:
- EJB:规范由Sun公司制定,有三种类型的 EJB,分别是会话Bean(Session Bean)、实体 Bean(Entity Bean)和消息驱动 Bean(
Message-driven Bean)。EJB 实现应用中关键的业务逻辑,创建基于构件的企业级应用程序** - COM、DCOM、COM+:COM是微软公司的。DCOM是COM的进一步扩展,具有位置独立性和语言无关性。COM+是COM的新发展或是更高层次的应用,不是COM新版本
- CORBA标准:主要分为三个层次:对象请求代理、公共对象服务和公共设施
- 最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是**分布对象系统中的“软总线”
- 在 ORB 之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务
- 最上层的公共设施则定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则
软件架构风格
闭环风格
C2体系风格
层次架构风格
两层 C/S 架构
客户端和服务端都有处理能力
三层 C/S 架构
将处理功能独立出来,表示层和数据层都变得简单。表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。三层 C/S 架构设计的
关键在于各层之间的通信效率。优点:
- 各层在逻辑上保持相对独立
- 允许灵活有效地运用相应的平台和硬件系统
- 各层可以并行开发
- 功能层有效地格力表示层和数据层,整个系统的管理层次更加合理和可控制
三层 B/S 架构
三层 C/S 架构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为网络上的WEB服务器,又称为0客户端架构。
富互联网应用RIA
RIA 是一种用户接口,比用 HTML 实现的接口更加健壮,且有可视化内容,本质还是网站模式,本质还是0客户端,借助于*
高速网速实现必要插件在本地的快速缓存*,增强页面对动态页面的支持能力,典型的如小程序。优点:
- RIA 结合了 C/S 架构反应速度快、交互性强的优点与 B/S 架构传播范围广及容易传播的特性
- RIA 简化并改进了 B/S 架构的用户交互
- 数据能够被缓存在客户端,从而可以实现一个比基于 HTML 的响应速度更快且数据往返于服务器的次数更少的用户界面
面向服务的架构风格 SOA
SOA 是一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义接口进行通信,不涉及底层变成接口和通信模型。在 SOA 中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。SOA
并不仅仅是一种开发方法,还具有管理上的优点,管理员可直接管理开发人员所构建的相同服务。多个服务通过企业服务总线提出服务请求,由应用管理来进行处理
实施 SOA 的关键目标是实现企业IT资产重用的最大化,在实施 SOA 过程中的特征:
- 可从企业外部访问
- 随时可用:服务请求能被及时响应
- 粗粒度接口:粗粒度提供一项特定的业务功能,而细粒度服务代表了技术构件方法
- 服务分级
- 松散耦合:服务提供者和服务使用者分离
- 可重用的服务及服务接口设计管理
- 标准化的接口:WSDL、SOAP、XML 是核心
- 支持各种消息模式
- 精确定义的服务接口
从基于对象到基于构件再到基于服务,架构越来越松散耦合,粒度越来越粗,接口越来越标准。基于服务的构件和传统构件的区别:
- 服务构件粗粒度,传统构件细粒度居多
- 服务构件的接口是标准的,主要是WSDL接口,而传统构件常以具体 API 形式出现
- 服务构件的实现和语言是无关的,而传统构件常绑定某种特定的语言
- 服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制
知识点
- 系统构件组装分为三个不同层次:定制(Customization)、集成(Integration)和扩展(Extension)
- CORBA 服务端构件模型中,伺服对象(Servant)是
CORBA 对象的真正实现,负责完成客户端请求 - J2EE 核心组成
- 容器:Applet Container、Application Container、Web Container、EJB Container
- 组件:Applet、Application、JSP/Servlet、EJB
- 服务:
- HTTP(Hypertext Transfer Protocol)超文本传输协议
- RMI-IIOP(Remote Method Invocation ober the Internet Inter-ORB Protocol):远程方法调用,融合了Java RMI 和CORBA(Common Object Rrquest Broker Architecture 公共对象请求代理体系结构) 在使用Application 或Web 端访问EJB 端组件是使用
- Java IDL(Java Interface Definition Language):Java 接口定义语言,主要用于访问外部的CORBA 服务
- JTA(Java Transaction API):用于进行事务处理操作的 API
- JDBC(Java Database Connectivity):为数据库操作提供的一组API
- JMS(Java Massage Service):用于发送点对点消息的服务
- JavaMail: 用于发送邮件
- JAF(Java Activation Framework):用于封装传递的邮件数据
- JNDI(Java Naming and Directory Interface )
- JAXP(Java API for XML Parsing ):专门用于XML解析操作的API
- JCA(J2EE Connector Architecture ):Java 连接器构架
- JAAS (Java Authenticati on and Authorization Service)
- JSF (Java Server Faces)
- JSTL (JSP Standard Tag Library)
- SAAJ (SOAP with Attachments API for JAVA)
- JAXR (Java ApI for XML Registries)