登录
注册
搜索
帮助
会员
界面
简洁版本
在线
IT、外语学习、管理咨询类社区
数据e
建站交流
技术文章_理解耦合
帖子标题
数据e
安装使用
功能建议
建站交流
服务器安全
求职招聘
外语培训
英语基础、口语
日语学习交流
韩语学习交流
IT培训
.NET开发
Web开发
JAVA开发
数据库
图形图象
管理培训
欧洲商学院MBA
管理学
休闲娱乐
八卦灌水区
魅力城市
襄樊古城
1
/ 1 页
1
跳转
页
查看:
775
技术文章_理解耦合
本主题由 管理员 admin 于 2009-1-4 14:34:55 执行 移动主题 操作
cherry
雨花石
组别:
超级版主
性别:
来自:
积分:
162
帖子:
107
注册:
2007-10-04
2008-04-09 13:20
|
只看楼主
树型
|
收藏
|
小
中
大
1
技术文章_理解耦合
耦合是一个含义不明确的术语,常被人撇到一边不管,很少有人去想它的含义及其对软件系统的影响。几乎差不多所有可伸缩性的场合,耦合都会起作用。而且
,
正如在
Mastering EJB 2.0
(
可从
www.theserverside.com
下载
)一书的“
Clustering
”
一章中详细论述的
,
可伸缩性是一个在计算机科学中没有什么基础的术语。耦合应该被提升到与详细审查(
scrutiny
)一样的地位。
耦合可用的方式有很多种:紧耦合、松耦合、去耦等等。这些术语真正的意思是什么呢?在谈到我们开发的软件时,我们会正确地使用它们吗?
面向消息的中间件(
message-oriented middleware
,
MOM
)的制造商是耦合这一术语最广泛的使用者(也许是滥用者?)。多年来,他们一直在吹嘘合并
MOM
体系结构最大的好处就是能把一个系统从另一个系统中解除耦合。但是真的是这样么?幸运的是,耦合是一个有着具体定义的实际术语。
如果系统的依赖性需要通过更新系统来支持依赖性所发生的变化时,那么系统就是耦合的。
去耦系统是指这样一种系统:以任何方式更新系统时都不会影响系统的操作。松耦合和紧耦合是两个意义不太明确的术语,因为它们用来描述系统及其依赖性之间的耦合“程度”。由于每个系统都以不同的方式来进行耦合,确定耦合程度的方式也往往会因人而宜。
让我们看一下这种定义是如何应用于
MOM
系统的。我们假定有两个应用程序
A1
和
A2
。这些应用程序使用点对点域模型来通过队列进行联系。我主张
A1
和
A2
之间是去耦的,但是整个系统是耦合的。为什么要这样呢?因为整个系统不仅仅只有
A1
和
A2,
通过队列建立联系的是那些应用程序,包括队列和消息。在大多数的
MOM
系统中,产生和消费消息到队列中的应用程序都通过一种预定义消息类型来工作。如果消息格式必须更新的话,那么作为生产者和消费者的应用程序也必须进行更新。这就意味着即使应用程序本身是去耦的,但系统也是耦合的。
Web
服务是去耦的?
Web
服务
供应商吹嘘其优点之一就是
Web
服务是去耦的
。事实并不是这样的。
Web
服务
系统在最基础的层面上,通过使用单个队列,利用两个应用程序来并行一个
MOM
系统。在一个简单的
Web
服务
场景中,有两个端点(应用程序)使用
SOAP
进行通信。
SOAP
协议好比是
MOM
队列,而
SOAP
请求就好比是消息。这就意味着
Web
服务
端点和
MOM
系统具有同样的消息格式。
如果包含在
SOAP
请求中的
XML
格式发生改变,那么产生和消费这些请求的端点也必须要改变。这就产生了耦合的问题,这个问题是所有
Web
服务系统固有的。
情况其实更糟。
XML
用于
SOAP
请求的消息格式是因为它是抽象的、灵活的、可用于描述许多不同的事物。但是,
Web
服务
端点总是用一种编程语言来实现,比如
Java
。所有
Web
服务
基础设施都必须提供一种机制来“绑定”
XML
(包含在
SOAP
请求中)到端点实现语言,反之亦然。在基于
Java
的
Web
服务实现中,
SOAP
解析基础结构必须提供一种
XML->Java
和
Java->XML
的绑定机制,以便将消息内容转换成
Java
参数,反之亦然。
这种
XML
和语言的绑定就产生了很多
MOM
系统无法解决的额外的耦合问题。许多
MOM
系统都对用于实现生产者和消费者端点的编程语言做了假定。对于一个纯粹的
JMS
系统,众所周知,端点是用
Java
语言实现的。这就使得
MOM
供应商将消息格式优化为支持
Java
,从而在后续减少和消除消息语言绑定的需要。对于
Web
服务就没有这种情况,因为语言绑定问题将一直存在。
因此,在管道层面上还存在争议。
Web
服务与现有的
MOM
系统相比,存在更大的耦合问题需要解决。在格式层面上,
MOM
系统具有更大的耦合问题,因为它们无法利用自我描述的消息格式,以便将界面从实现中分离出来。
解决
Web
服务的耦合问题
作为
BEA WebLogic Workshop
框架的一部分,
BEA
引入了一种新技术,并且相信有助于消除
Web
服务的耦合问题。这种技术称为
XMAP
,它能够完成两件事:
1.
消除
XML
和语言的绑定问题。
2.
解除
Web
服务消息和特定实现之间的耦合,这样两者就都能够单独实现。
作为
XMAP
技术如何工作的简单实例,让我们介绍一下由
WebLogic Workshop
提供的
InputMapMultiple
示例。假定您已经建立了一个
Web
服务,但是
XML
消息格式是预先确定的。这是一种常见情况,就像
B2B
网络已经有了预先确定的消息格式用于消息交换一样,您必须遵循它。
XMAP
技术允许您使用自己创建的实现程序和语言界面来建立
Web
服务,然后
在
XML
中映射成特定语言。
我们假定
XML
的内容如下:
<order>
<item>
<name>Oranges</name>
<amount>4</amount>
<price>2.0</price>
</item>
<item>
<name>Apples</name>
<amount>12</amount>
<price>3.6</price>
</item>
<item>
<name>Pears</name>
<amount>6</amount>
<price>6.8</price>
</item>
<item>
<name>Tangerines</name>
<amount>13</amount>
<price>6.31</price>
</item>
</order>
正如您所看到的
,
<order>
元素
可以有一个或多个
<item>
元素。现在
,
作为
Web
服务开发人员
,您
想要创建适合您需要的(而非
XML
需要的)
Java
接口。所以,经过一番思考之后,您想要定义调用这一消息的实现方法,如下所示:
public float getTotalPrice(String [] nameArr,
int [] amountArr,
float [] priceArr)
我们希望每一参数的
[0]
数组元素能够填入第一个
<item>
结构的匹配元素的值。希望每一参数的
[1]
数组元素能够填入第二个
<item>
结构的匹配元素的值。依此类推。
进入
XMAP
XMAP
允许我们执行这种映射关系。一个
XMAP
代码片断就是一个包含了一些扩展的
XML
结构。
XML
结构是一种消息格式,它可以在线传输和消费。如果消息格式是预先确定的,并且您已经知道了这种格式,那么您所创建的
XMAP
结构只需要模仿预先确定的格式即可。如果没有预先确定的格式,那您所创建的
XMAP
结构就应该成为
Web
服务所需要的
XML
消息格式。我们本例中的
XMAP
是:
<order>
<item xm:multiple="String name in nameArr, int amount in amountArr, float price in
priceArr">
<name>{name}</name>
<amount>{amount}</amount>
<price>{price}</price>
</item>
</order>
注意,
XML
格式和我们的
XML
片断几乎是一样的。细微差异在于有一个
xm:multiple
属性
作为
XMAP
的扩展,并且一些参数的值用花括号
{}
括住了。
XMAL
有许多扩展,这些扩展在
WebLogic Workshop
文档中有完整的记录。
在
XMAP
中,任何一个用花括号括住的值,比如
{name}
,表明在
XML
消息中该元素出现的值必须要插入到带有相同名字的语言参数中去。这表明
<name>{name}</name>
结构将会有值,这个值出现在插入到名为“
name
”的
Java
参数的元素之间。但是,如果您注意了我们的方法的话,就会发现并没有一个叫做“
name
”的参数,我们使用一个数组来代替。
xm:multiple
属性是
XMAP
处理重复的
XML
结构的方法。属性的
String
值是一条命令,告诉
XMAP
解析器插入什么值到哪个数组中。例如,
XMAP
命令告诉解析器将
{name}
的值作为一个数组元素插入到
nameArr
数组中,
nameArr
数组是
Java
方法的一个参数。使用这一语法,
XMAP
解析器能够正确地填入数组的所有值。
XMAP
异常健壮。事实上,有一种名为
Xscript
的技术,它是
ECMAScript
的扩展。
ECMAScript
允许您在
XMAP
中应用逻辑结构,这样在绑定发生时就能够做出决定,反之亦然。另外,
XMAP
可应用到传入参数和传出参量中,这样就可以为不同的场景创建不同的
XMAP
。
结束语
那么,耦合问题消除了么?还没有完全消除,但它提供了很大的帮助。您的
Web
服务将仍然与
XMAP
耦合在一起,但最大的成绩是,您的
Web
服务和
XML
消息能够彼此解除耦合。
XMAP
的好处还在于它不仅仅适用于
Java
语言。
Microsoft
也用它从
Web
服务中解除
C#
应用程序的耦合。这就铺平了
XMAP
的采纳之路,使其为更多的
Web
服务社区所采纳,而不仅仅局限于
Java
社区。
作者简介
Tyler Jewell是BEA的技术传播先驱。他还是《Java Web Services》一书的作者,《Mastering Enterprise JavaBeans 2.0》和《Professional Java Server Programming (J2EE 1.3)》的作者之一。J2EE和Web服务这两方面的Web题材的书他都写过。
华纬教育网www.hwjy.net.cn提供IT、外语学习、管理咨询类社区
发送短消息
查看公共资料
查找该会员全部帖子
UID:
3
精华:
1
威望:
50
金钱:
311.2 金币
状态:
离线
<<
上一主题
|
下一主题
>>
1
/ 1 页
1
跳转
页
论坛跳转...
数据e
安装使用
功能建议
建站交流
服务器安全
求职招聘
外语培训
英语基础、口语
日语学习交流
韩语学习交流
IT培训
.NET开发
Web开发
JAVA开发
数据库
图形图象
管理培训
欧洲商学院MBA
管理学
休闲娱乐
八卦灌水区
魅力城市
襄樊古城
我的主题
我的帖子
我的精华
帖子标题
空间日志
相册标题
作 者
我的主题
我的帖子
我的附件
我的精华