写程序,做产品,过日子

成功其实很简单,就是强迫自己坚持下去

BlogJava 首页 新随笔 联系 聚合 管理
  69 Posts :: 1 Stories :: 92 Comments :: 0 Trackbacks

Powerdesigner是我最喜欢的建模软件,其功能最全,易用性最好,使用感受最舒服。可扩展性也非常好。

Powerdesigner对MDA的支持很灵活。其实,MDA工具所要做的事情,就是UML模型与代码间的双向转换:从模型可以生成代码;从代码可以生成模型。这里面有两个关键点:
1、模型生成的代码不能是垃圾代码,要正确,还要符合我们所指定的编码规范——尤其是注释。
2、从代码到模型再到代码时,原始代码中的所有内容应当充分保留。不应发生注释或方法体丢失。

我根据特定的编码规范,通过二次定制powerdeisgner的java 5语言成功实现了上述MDA特性。

在powerdesigner中,编程语言完全是一个定制项。其全部特征信息都记在一个后缀名为xol的xml文件中。比如java5的定制文件是Powerdesigner 12\Resource Files\Object Languages\java5-j2ee14.xol

专家级牛人可以通过修改这类文件达到任何目录。对于我来说,xol文件太长,有太多的cdata,不好搞,还是通过powerdesigner中的“edit current langauge"来修改比较好。

在powerdesigner中点击language->edit current language,就会出现语言特性编辑界面。要编辑它比较容易,下面就几个关键特性举例说明。

1、每个java文件最头部的声明性注释。位于文件最顶部,在package和import语句的前面。

2、类注释,也就是javadoc注释,位于类声明之前,import语句之后。Powerdesigner直接支持它。

 

我们的@version内容不是一行代号,而是一个revision history。所以有必要调整输入框:在上图中将Data Type由String改为Text。这样就可以在一个弹出的多行文本编辑框中编辑缺省值。如下图所示。

 

如果定制模板,可以引用变量,如%@author%, %Model.Author%, %CurrentDate%等,但上面缺省值编辑中不能引用变量。此外,Powerdesigner对于日期的格式化只是简单的输入缺省格式。

这样在类和接口的属性窗口中,java doc version就不再是一个单行文本编辑框了。

 

3、最后输入的javadoc注释格式有点不符规范。可修改如下。

这样,最后输出的结果就很漂亮了。

上面的@pdOid是可以删掉的,因害怕影响逆向工程的同步,我没有动它。

 

4、上面收尾的"*/"没有换行,可以在BaseObject.javaDocComment中修改。

 

5、Javadoc要求每个包有个package.html。

 6、我们不用EJB了,把多余的EJB原型(Stereotype)全部删掉。类和接口下也有,都可以删掉。

 

Powerdesigner生成java代码的定制虽然强大,但也有不足。比如在模型中给类添加了一些属性,然后让其自动生成setter方法。这些setter方法中的参数是以"new"会前缀的,想把"new"改成"p"基本上做不到。究其原因,是这个方法的声明来自自动生成脚本,我们无从定制。

 

 

Powerdesigner的逆向工程功能也很棒!不过要注意两个设置。一是保留@pdOid注释。二是确认是否删除代码中不存在的类、方法和属性。如下图所示。

上面的Deletion缺省是不选中的。就是说不删除模型中存在,但代码中不存在的类,属性和方法及方法中的参数。对于类来说删不删各有所好。对于属性和方法来说有点不合理。对于方法中的参数来说就是个灾难性的错误。

比如,模型中的有个方法someMethod(String parameter),在源代码中、参数的类型由String改成int: someMethod(int parameter),保持名称不变。如果不选Deletion,最终结果会是:SomeMethod(String parameter, int parameter2)。 

@pdOid是专为逆向工程服务的。有了它,Powerdesigner就以它为唯一标识来识别类,属性和方法。即使在类、属性或方法的名称发生变化的情况下,它仍能正确逆向的更新模型。

在没有@pdOid时,如果发生类名的变化,Powerdesigner会新增一个类,并删去旧类(当选中Deletion时)。引用这个类的时序图或类图将发生类丢失的现象。

 

除了定制生成代码的模板外,Powerdesigner也支持自定义逆向工程——从java 代码到OOM模型。如下图所示。

但是,我们并不能扩展Powerdesigner内内置的逆向工程,只能自己做一个全新的。这样做的工作量就太大了。

Powerdesigner已有的逆向工程在注释的转换上存在较大的问题:只支持有限的注释声明。比如Java5中的泛型参数的注释@param <V>就不支持,Powerdesigner会认为不存在这个参数,而忽略这个注释。

这个功能的缺失直接破坏了正向->逆向->再正向的循环——当你再正向时,原来辛辛苦苦写的注释有一部分丢失了。



Powerdesigner是个让人想爱又想恨的软件。它的缺点和优点一样突出:首先就是价格超贵,不是一般的公司能承受的,更别提个人了:( 其次它总是会在重要功能上出现几个麻烦的bug。比如12.1版本,序列图中居然无法从调用方法列表中选取方法。这个bug在12.5中已经解决。我使用的是试用版。
最后还有一个问题就是对java5的新特性的支持还不到位。泛型的注释在转换过程中会丢失。

posted on 2007-05-04 15:57 Welkin Hu 阅读(1313) 评论(1)  编辑  收藏 所属分类: 软件开发

Feedback

# re: 定制Powerdesigner Profile,实现个性化的双向MDA[未登录] 2011-08-31 09:23 zhou
太感谢了,这篇文章非常有用,刚刚接触Powerdesigner 一直不知道在哪里改模板  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: