注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

等闲识得东风面,万紫千红总是春!

 
 
 

日志

 
 

定制Powerdesigner Profile,实现个性化的双向MDA  

2009-02-19 11:49:58|  分类: Sybase |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
标签:定制 Powerdesigner Profile MDA   [推送到技术圈]

版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
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的新特性的支持还不到位。泛型的注释在转换过程中会丢失。

本文出自 “威尔金的IT博客,51CTO” 博客,转载请与作者联系!

本文出自 51CTO.COM技术博客
  评论这张
 
阅读(733)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017