摘要:
软件模式,非凡是设计模式在现今的软件开发中越来越重要。在许多的标准,工具,以及开发方法中都引入了模式的概念。本文介绍了如何在UML中对软件模式进行建模,并结合具体的工具Rational XDE,对如何定义,如何应用模式作了具体地介绍,并指出了一些相关的问题。
第二部分:XDE中的模式机制
1 概述
在前一期的系列文章中,我们对模式,非凡是设计模式在UML中的建模方法作了简要地,理论上的介绍。现在该要进行实践了。现在支持模式建模并能够基于模式进行应用程序开发的工具并不是很多。Rational XDE是其中最为闻名的一个,并且确实提供了极为优秀的功能。
XDE的java版有两种,一种是基于Eclipse内核的独立运行版本(目前只支持Eclipse1.0)。另为一个是集成在WASD中的,作为WASD的一个插件同其以其运行(目前只支持WASD 4.0)。实际上WASD使用的就是Eclipse的内核,所以,这两者在功能上(甚至外观上)都没有多大的区别。现在Rational已经被IBM所合并,所以有足够的理由可以相信,在未来的WSAD中,XDE的功能会被更加完美的整合到其中。
XDE最大的卖点有两个,一个是分析设计同代码编写在是在同一个IDE中完成的,并可以进行正向-逆向工程,完美的实现迭代开发中所需要的模型-代码的映射。另外一个就是这篇文章的主题:模式的定义和应用。你不仅可以使用XDE中预定义好了的23个经典的GoF设计模式,还可以自己定义模式,在开发中应用它们,或者导出供其他人使用。
模式机制是XDE中实现重用的核心技术。你可以通过这个机制来实现模型元素和其它制品的重用。它提供了Model-to-Model和Model-to-Code的变换功能。这使得你能够将一个涉及的模型作为来帮助一个特定的设计。它还是得你能够将一个模式中的元素内容合并到已存的设计模型中。
2 XDE中的模式描述
在XDE中,模式的描述基本上遵循了UML所定义的参数化协作标准。但是,由于UML中定义的只是如何来对模式建模,而对如何定义模式,应用模式,以及具体的代码生成并没有过多涉及。因而,XDE在UML的基础上,作了一些合理的扩展。
首先,我们来看一看Asset的概念。一个Asset是一些软件制品的集合,它们被组织在一起以期能够解决某一个问题。Asset能够通过其定义的可变点(Variability Point)来进行扩展,在进行Asset重用的时候,开发者需要对这些可变点提供具体的内容来充实Asset,以完成Asset的重用。
Rational现在推崇一种Asset Based Development过程方法,来作为其对RUP的一个补充,Asset就是其要害。这儿并不打算对Asset和Asset Based Development作过多地论述,那已经偏离了这篇文章的主题。从模式这个范畴而言,你可以简单的把Asset看作是模式的定义,描述及其具体的实现。
在XDE中, Asset表示为一个构造型为<<Asset>>的包。被申明为<<Asset>>的包可以被导出以利于在不同的开发者,甚至不同的工具中重用,只要它们都遵循Asset的规范Reusable Asset Specification。
模式是一种Asset,但是Asset并不一定是模式。一个模型可以被包装在一个Asset中,而其中并不带有任何的模式描述。XDE能够处理这两种可重用项目。在XDE中,模式表示为包含在一个<<Asset>>包中的,带有模板参数的合作图。有很多种方法可以创建一个<<Asset>>包,但需要注重的是,创建一个UML的包并手工地将其版型设置为<<Asset>>并不会将这个包注册为模式。
在XDE中,<<Asset>>包可以被导出为一个.ras文件。一个.ras文件实际上就是一个zip文件,不过它有着自己的内容结构,这和J2EE中的.war文件很类似。它使用了rasset.xml和resource.xml这两个xml文件来提供对这个压缩文档的描述。RASAsset.xsd文件是RAS的XML Schema,定义rasset.xml和resource.xml这两个文档的内容格式和含义。其它的文件是模型和文档制品。
在XDE中,模式由如下的一些部分组成:
Asset
在一个模式的底部是一个版型为<<Asset>>的包。模式中涉及到的所有内容都包含在这个包中,它也是用来导出符合RAS规范的可重用模式的逻辑单元(实际的物理封装单元可是一个包,也可以是一个模型)。模式也可以不存在于Asset包中,但是因为模式的创建目标,就是希望能够通过RAS规范来进行重用的,所以并不推荐使用这种方法。
模板协作(Template Collaboration)
在模式Asset中就是template collaboration,它是模式的核心。几乎模式所涉及的所有内容都定义在其中。模版参数的属性可以通过Pattern EXPlorer来查看。
模板参数(Template Parameters)
一个模板协作包含有一个或者多个模板参数,每一个定义一个特定的模式输入。例如,假如你想有一个名为MyClassInput的参数,你可以使用那个名字创建一个模板参数。
类型元素(Type Element)
每一个模板参数都有一个类型,通过其Type属性来定义。例如,假如模板参数的类型是class,那么这个模板参数就只接受类作为其参数值。这同在定义一个函数的参数时,需要指定其参数的类型(比如int)是一样的。
基础上下文(Root Context)
一个模式还有一个基础上下文,在创建模式时所引入的其它元素被组织在这个地方。这些元素通常都会被直接创建,需要很少或者根本不需要参数来创建它们。比如在一个模式中会被用到的一个支撑类。缺省情况下,基础上下文就是Asset包。你可以在Pattern Explorer中将其切换到其它的包中。
实际上在模式所在的Asset包中,可以存在任何类型的元素,比如描述模式结构的类图,描述模式中参与者之间的交互的顺序图,等等,都可以被放在基础上下文中,在模式被扩展的时候一起被复制到扩展点处。
为了提供对模型的可视化开发和表示,XDE在Eclipse的基础上,添加了新的Model透视图(Perspective)。实际上所有模型相关的内容,不仅仅是模式,都是在这个透视图中实现的。而对模式,除了所有模型公用的Model Explorer外,还有一个Pattern Explorer和Pattern PRoperty视图来提供对模式的定义和描述。对这些界面的使用都还比较简单,要害的是要搞清楚那些属性,设置值是来做什么的。除了上面的那些标准的Eclipse图形元素外,XDE中还引入了Pattern Wizard来帮助你完成模式的应用。