使用PowerDesigner的物理模型生成不同的数据库和转换成OOM模型生成CS实体类代码

转:http://blog.csdn.net/huwei2003/article/details/6123065    第 五      使用PowerDesigner的物理模型生成不同的数据库和转换成OOM模型生成CS实体类代码


5.使用PowerDesigner的物理模型生成不同的数据库和转换成OOM模型生成CS实体类代码

PowerDesigner的物理模型保存的文件是用XML来描述模型结构的格式,所以它不会受任何数据库类型的影响。假如我们刚开始的例子是使用sql2000数据库创建的物理模型,那么现在使用PowerDesigner能马上生成一份Oracle、DB2、Mysql或Access数据库的创建脚本。选择Database工具栏中的Change Current DBMS菜单,将以前的Microsoft SQL Server 2000改为MySQL 5.0,以前sql2000数据库的模型摇身一变成了MySQL,在Preview选项卡里面我们就能看到MySql的drop table if exists的sql语法了 ,这里需要注意的是转换过程中可能会出现一些错误,可能是因为你在模型里使用了某种数据库特有的一些语法或功能,在新选择数据库内不能被支持使用,所以建议从一开始就使用规范的一些SQL语法建立数据库为后面有可能移植转换做考虑,之前还提到了使用Domian自定义类型,这里就能很好的应用,如修改当前时间的自定义类型的默认值为CURDATE()即可修改所有引用字段以支持MySql数据库,或修改autoId自定义类型为其他非int类型为表的主键等等。

PowerDesigner里面各种模型是能实现无缝隙进行相互转换的。还是以刚开始会员为例子,我现在建好了物理模型需要转换为OOM模型,并把数据库所有表映射生成cs代码实体类。点击Tools工具栏选择Generate Object-Oriented Model菜单,选择生成OOM对象的语言,这里以C# 2.0为例,如果物理模型表里的Name为中文转换生成的OOM类对象字段里面也全是中文的话,请确保在转换时OOM Generation Options里的Detail选项卡内的Convert names to into codes没有被选中。转换成功后我们可以在OOM里面看到会员对象的一些关系和生成cs代码如下图:

从图片可以看出,会员与会员类型是1对1关系,而会员类型可以对应多个会员。所以生成的cs代码里会员表没有会员类型编号字段,而有一个FA_MemberType类型的属性,代表当前会员的会员类型,而会员类型表里面会多一个System.Collections.Generic.List<FA_Member>属性,代表当前会员类型的所有会员列表集合,PowerDesigner把这些面向对象的思想真的表现得淋漓尽致。但有时候我们需要的实体类是数据库内原分不动的字段映射过来,而不需要FA_MemberType类型的属性只要一个包含memberTypeId字段的完整会员表实体怎么办?我这里介绍一个简单的办法,在物理模型转换为OOM对象模型前先把表之间的所有References主外键关系全部删除掉,可能删除表的主外键关系时会PowerDesigner也会把主从表的主外键列也全部删除去,设置Tools工具栏Model Options里Reference选项里的Auto-migrate columns勾去掉即可。删除后不保存之前的物理模型直接转换成OOM后再Ctrl+Z恢复之前删除的References,这时可以看到OOM模型里面的会员类对象便是数据库会员表所有字段原分不变的映射。另外,OOM模型可以直接生成VS的工程文件带所有cs实体类文件,那么,我们使用PowerDesigner建立好数据库的物理模型后,又可转换成OOM对象模型轻松生成cs代码实体类。

可能有些朋友的PowerDesigner打开工程Preview里看到的不是我这样的cs代码,而是一些public int MemberId之类的字段,这是因为PowerDesigner将物理模型转换到OOM对象模型的时候表的所有字段是被变成类模型里面的Attributes,而Attributes配置生成的模板默认是不带有get和set访问器的,修改Language工具栏Edit Current Object Language菜单找到Profile > Attribute > Templates > definition修改模板即可。我的C#2.0模板如下:

. if  ( % isGenerated % ) and ( % isValidAttribute % )
[
% comment % /n]/
[
% oidDocTag % /n]/
[
% customAttributes % /n]/
   .
if  ( % Multiple %   ==   false ) and ( % isIndexer %   ==   false )

private [
% flags %  ] % dataType %   % fieldCode % =   % InitialValue % ];

[
% visibility %  ][ % flags %  ] % dataType %  
.convert_name(
% fieldCode % ,, " _ " ,FirstUpperChar)
{
   get { 
return   % fieldCode % ; }
   set { 
% fieldCode %   =  value; }
}

   .
else

private [
% flags %  ] % dataType % [ % arraySize % % fieldCode % =   % InitialValue % ];

[
% visibility %  ][ % flags %  ] % dataType %  
.convert_name(
% fieldCode % ,, " _ " ,FirstUpperChar)
{
   get { 
return   % fieldCode % ; }
   set { 
% fieldCode %   =  value; }
}

   .endif
.endif

Java 5.0带get和set访问规则Bean对象生成模板如下:

. if  ( % Multiple % )
[
% javaDocComment % /n]/
private [
% flags %  ] % dataType % /[/]  % fieldCode % =   % initialValue % ];

% visibility %   % flags %   % dataType % /[/] get
.convert_name(
% fieldCode % ,, " _ " ,FirstUpperChar)
()
{
   
return   this . % fieldCode % ;
}
% visibility %   % flags %   % dataType % /[/] set
.convert_name(
% fieldCode % ,, " _ " ,FirstUpperChar)
 (
% dataType %   % fieldCode % )
{
   
this . % fieldCode %   =   % fieldCode % ;
}
.
else
[
% javaDocComment % /n]/
private [
% flags %  ] % dataType %   % fieldCode % =   % initialValue % ];

% visibility %   % dataType %  get
.convert_name(
% fieldCode % ,, " _ " ,FirstUpperChar)
()
{
   
return   this . % fieldCode % ;
}
% visibility %   void  set
.convert_name(
% fieldCode % ,, " _ " ,FirstUpperChar)
 (
% dataType %   % fieldCode % )
{
   
this . % fieldCode %   =   % fieldCode % ;
}
.endif

PowerDesigner几乎所有模型转换生成都可以使用模板来配置,这样能充分的让用户自定义来实现想要的功能。

PowerDesigner的OOM功能远远不只这一些,最重要的是使用UML建用例图了,在面向对象里面的继承、多态,面向接口编程,对象之间的依赖、包含等关系也能在这里一一体现,不同的箭头线条各自代表着不同的意思,也能够生成一些cs伪代码,由于本文主要将PDM物理模型,这里就不再赘述。不知那些大师也会不会使用PowerDesigner或Rose来画画图呢?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值