构件与中间件
构件
构件的定义
构件的概念没有明确的定义。但是业界大多数人比较倾向于如下定义一 定义一:认为构件是一种组装单元,它可以可以是一个封装的对象,可以是软件包,也可以是一个子系统,甚至是一些文档。它具有规范的接口规约和显式的语境依赖,软件构件可以独立的部署并由第三方任意组装。中间件是构件的一种,主要完成构件之间的通信。
定义二:构件是某系统中有价值的、几乎独立的兵可替换的一部分,它在良好定义的体系结构语境内满足某清晰的功能。
定义三:构件是一个独立发布的功能的部分,可以通过其接口访问它的服务。
构件、对象、模块的对别
构件的特性 | 对象的特性 | 模块的特性 |
---|---|---|
1.独立部署单元 2.作为第三方的组装单元 3.没有(外部的)可见状态 | 1.一个实例单元,具有唯一的标志 2.可能具有状态,此状态外部可见 3.封装了自己的状态和行为 | 结构化开发的产物 |
构件的复用
想利用构件组成一个系统需要经历四个步骤:==检索与提取构件==;==理解与评价构件==;==修改构建==;==组装构件==
中间件概念
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。中间件主要负责构件之间的连接和通信:
- 负责客户机与服务器之间的连接和通信,以及客户机与应用层之间高效率的通信机制
- 提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制,如jdbc
- 提供多层架构的应用开发和运行的平台,以及应用开发框架,支持模块化的应用开发
- 屏蔽硬件、操作系统、网络和数据库的差异
- 提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性
- 提供一组通用的服务去执行不同的功能,避免重复的工作并使应用之间可以协作
原子构件
构件是一组通常需要同时部署的原子构件。构件和原子构件之间的区别在于,大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反,大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族。一个原子构件是一个模块和一组资源。
原子构件是部署、版本控制和替换的基本单位。
原子构件通常成组地部署,但是它也能够被单独部署。
一个模块是不带单独资源的原子构件(在这个严格定义下,Java 包不是模块--在 Java 中部署的原子单元是类文件。一个单独的包被编译成多个单独的类文件--每个公共类都有一个)。
模块是一组类和可能的非面向对象的结构体,比如过程或者函数。
系统构件组装三个层次
系统构件组装分为三个不同的层次:定制(Customization)、集成(Integration)、扩展(Extension)。这三个层次对应于构件组装过程中的不同任务。
构件失配
在构件组装过程中需要检测并解决架构失配问题。其中 (构件) 失配主要包括由于系统对构件基础设施、控制模型和数据模型的假设存在冲突引起的失配。 (连接子) 失配包括由于系统对构件交互协议、构件连接时数据格式的假设存在冲突引起的失配。
CORBA构件模型
corba构件模型: 公共对象请求代理体系结构
解决分布性问题最普通的体系结构模式是代理(Proxy)模式。CORBA是代理模式的一个范例
概念
CORBA,是一种远程调用的机制。在系统整个结构中有客户端和服务端,大部分功能接口都放在了服务端。当客户端需要调用服务端的接口时,可能会遇到一些问题。比如,网络通不通,如何调用,资源竞争,数据安全等一系列问题。CORBA有一种代理机制,就是在客户端有服务端对象的引用,当客户端需要调用服务端时,只需要在客户端,访问CORBA对象的引用就可以了。剩下的操作就由CORBA中间件内部去完成。RMI也是一样的思想。
- 伺服对象(Servant):CORBA对象的真正实现,负责完成客户端请求。
- 对象适配器(Object Adapter):用于屏蔽ORB(Object Request Broker)内核的实现细节,为服务器对象的实现者提供抽象接口,以便它们使用ORB内部的某些功能。
- 对象请求代理(Object Request Broker):解释调用并负责查找实现该请求的对象,将参数传给到的对象,并调用方法返回结果。客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制,起到了一个衔接各方,充当了信息交换的一个总线结构。
可移植对象适配器POA:在底层传输平台与接收调用并返回结果的对象实现之间进行协调 伺服对象Servant:最终完成客户请求的服务对象实现(CORBA对象的真正实现),负责完成客户端请求。是指具体程序设计语言的对象或实体,通常存在于一个服务程序进程之中。
POA是对象实现与ORB其它组件之间的中介,它将客户请求传送到伺服对象,按需创建子POA,提供管理伺服对象的策略。
CORBA对象可看作是一个具有对象标识、对象接口及对象实现的抽象实体。之所以称为抽象的,是因为并没有硬性规定CORBA对象的实现机制。由于独立于程序设计语言和特定ORB产品,一个CORBA对象的引用又称可互操作的对象引用(Interoperable Object Reference)。从客户程序的角度看,IOR中包含了对象的标识、接口类型及其他信息以查找对象实现。
客户程序通过对象引用发出的请求经过ORB担当中介角色,转换为对特定的伺服对象的调用。在一个CORBA对象的生命期中,它可能与多个伺服对象相关联,因而对该对象的请求可能被发送到不同的伺服对象。
对象标识(Object ID)是一个用于在POA中标识一个CORBA对象的字符串。它既可由程序员指派,也可由对象适配器自动分配,这两种方式都要求对象标识在创建它的对象适配器中必须具有唯一性。
CORBA体系的主要内容
对象请求代理(Object Request Broker,ORB)。负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。
- 对象服务(Object Services).为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域
- 公共设施(Common Facilities)。向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。
- 应用接口(Application Interfaces).由销售商提供的可控制其接口的产品,相当于传统的应用层标识,处于参考模型的最高层。
- 领域接口(Domain Interfaces).为应用领域服务而提供的接口,如OMG组织为PDM系统制定的规范。