`

使用PowerDesigner进行代码生成

阅读更多
很多代码生成器都选择了从表结构来生成领域模型,这样的方案有一个前提,就是领域模型和数据库表结构是同构的,也就是说领域模型中的类和数据库中的记录结构十分吻合,这样数据库表结构可以简单的直接映射到领域模型。
但是在业务逻辑比较复杂的情况下,对象方案和关系方案往往是不相配的,通常在两者之间有一个数据映射器来隔离两者,这时两者是相互不可见的,相互独立演变的。这样,基于表结构的代码生成领域模型的类就行不通了,而应该使用对象模型。而这样的代码生成几乎不需要自己在写代码生成器,可以使用PowerDesigner9。
PowerDesigner9自己就已经具有代码生成功能,你只要建立一个Object_Oriented Model(语言选择C#,类图),完成类设计后,使用Language菜单下的“Generate C# Code”。生成完后看看代码文件,所有的属性都没有get和set方法,要想生成这两个方法,就要自己动手修改PowerDesigner的代码生成模板,可以选择Language菜单下的“Edit Current Object Language”,在弹出的窗口中修改代码模板:
可以在value部分看到代码生成的脚本,如果你使用codesmith等代码生成工具写过模板,这段脚本就很容易理解了,只要自己修改下就可以了,例如,我把其中的第三行:[%visibility% ][%flags% ]%dataType% _%Code%[ = %InitialValue%];
这句改成:
private %dataType% _%Code%[ = %InitialValue%];
public %dataType% %Code%
{
get
{
return _%Code%;
}
set
{
value = _%Code%;
}
}
另外两个if分支中的也作相应的修改,再生成一次看看,get和set函数都有了。

C#的代码模板是PowerDesigner的安装目录下的Resource Files\Object Languages目录下的csharp.xol文件,打开后可以看到实际上是一个xml文件,这样你就可以自己定义代码生成的模板了。
上面是使用PowerDesigner直接生成C#代码,为了通用性考虑,首选xml,可以给对象模型的语言选择xml Schema,用对象模型生成一个xsd文件,然后自己来写一个代码生成器,我作了一个很简单的例子,有兴趣的朋友可以看看。
PowerDesigner生成的xsd文件内容:
<?xml version = "1.0" ?>
<xsd:schema name="ObjectOrientedModel_1.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Customers">
<xsd:element name="ID" type="int"/>
<xsd:element name="Name" type="string"/>
<xsd:element name="Address" type="string"/>
</xsd:element>
<xsd:element name="Orders">
<xsd:element name="ID" type="int"/>
<xsd:element name="CustomerID" type="int"/>
<xsd:element name="OrderNumber" type="int"/>
</xsd:element>
</xsd:schema>
我又使用了一个xml文件作生成器的配置config.xml文件内容:
<?xml version="1.0" ?>
<template>
<xsdfile name='Z:\study\cs\ObjectOrientedModel_1.xsd'/>
<outputdirectory name='z:/csfile'/>
<namespace name = 'dahuzizyd'/>
</template>

我机器上的开发环境和VS.net有冲突,只好用python写了一个,但是只有不到50行,应该是比较容易读懂的:
fromxml.domimportminidom

importos



#getconfig

configdoc
=minidom.parse('config.xml')



xsdfilename
=configdoc.getElementsByTagName('xsdfile')[0].attributes['name'].value

namespace
=configdoc.getElementsByTagName('namespace')[0].attributes['name'].value

outputdirectory
=configdoc.getElementsByTagName('outputdirectory')[0].attributes['name'].value



#loadxsdfile

xsddoc
=minidom.parse(xsdfilename)

basenode
=xsddoc.childNodes[0]



#create.csfile

fornodeinbasenode.childNodes:

ifnode.nodeType==node.ELEMENT_NODE:

filename
=node.attributes["name"].value



f
=open(outputdirectory+filename+'.cs','w')

f.write(
'usingSystem;\n')

f.write(
'namespace'+namespace+'\n')

f.write(
'{\n\t')

f.write(
'class'+filename+'\n')

f.write(
'\t{\n')



nodeList
=node.getElementsByTagName('xsd:element')



forelementNodeinnodeList:



name
=elementNode.attributes["name"].value



ifelementNode.hasAttribute('type'):

elementType
=elementNode.attributes["type"].value



f.write(
'\t\tprivate'+elementType+'_'+name+';\n\t\t')

f.write(
'public'+elementType+''+name+'\n\t\t{\n\t\t\t')

f.write(
'get{return_'+name+';}\n\t\t\t')

f.write(
'set{_'+name+'=value;}\n')

f.write(
'\t\t}\n')



f.write(
'\n')



f.write(
'\t}\n')

f.write(
')')

f.close()
习惯了用Powerdesigner设计数据库模型,XDE设计类图。因此我一般的设计方法是用PD做分析模型,然后,用分析模型生成数据库物理模型和C#代码,再用XDE从C#代码中反向工程生成XDE模型。
但是在今天生成代码时发现一个小小的问题:在PD生成代码时,它会将实体中的attribe生成C#中的public field,而不是property,找了半天终于发现有一种方法:
在\Resource Files\Object Languages\csharp.xol文件中保存了根据模型生成代码的配置,因此,只需要修改其中Attribute项的definition项即可。或者使用lanuage-->edit current object language..功能,将 Profile\Attribute\Templates\definition改为:
.if (%isValidAttribute%)
[%comment%\n]\
[%customAttributes%\n]\
[%oid%\n]\
.if (%multiplicity% == 1) and (%isIndexer% == false)
private %dataType% _%code%[ = %InitialValue%];
[%visibility% ][%flags% ]%dataType% %code%
{
get
{
return _%code%;
}
set
{
_%code%=value;
}
}
.else
private %dataType%[%arraySize%] _%code%[ = %InitialValue%];
[%visibility% ][%flags% ]%dataType%[%arraySize%] %code%
{
get
{
return _%code%;
}
set
{
_%code%=value;
}
}
.endif
.endif
(上面的代码可以做define进行简化。)



另外,今天在Flier's Sky那里找到了一个.NETRefactoringforVS.NET的破解方法,
不过那个注册表路径有问题,应该是[HKEY_LOCAL_MACHINE\SOFTWARE\.NETRefactoring\C#RefactoringTool]
"Key"="FlierLu"

分享到:
评论

相关推荐

    powerDesigner 导出 JAVA 代码

    - **选中“生成代码(Generate code)”**:激活代码生成功能。 - **选择“preview”栏目**:预览当前选择类的JAVA代码。 - **点击红色圈处表示的按钮**:弹出导出时的一些选项。 - **设置各项的value值**:可以影响...

    使用PD(PowerDesigner)自动生成Hibernate的POJO文件及xml配置文件

    3. **模型验证**:在代码生成之前,PowerDesigner会执行模型检查,确保UML模型符合Hibernate的语法规范。任何不符合规则的设计都会触发错误提示,帮助开发者及时修正模型。 4. **配置信息设置**:通过模型属性设置...

    powerdesigner导入excel生成表结构

    根据给定的文件信息,我们可以总结出以下关于如何利用PowerDesigner通过Excel文件生成数据库表结构的知识点: ### PowerDesigner 导入 Excel 生成表结构 #### 功能简介 PowerDesigner 是一款强大的数据建模工具,...

    PowerDesigner通过excel生成sql脚本.rar

    标签"数据库"和"PowerDesigner"明确了主题,表明这个压缩包是关于数据库管理和设计的,特别是使用PowerDesigner这个工具进行操作。数据库是存储和管理信息的核心,而PowerDesigner则提供了一个图形化的界面,使得...

    PowerDesigner+12+建数据库及自动生成代码流程

    PowerDesigner是一款强大的数据库设计工具,尤其在数据建模和代码生成方面表现卓越。在PowerDesigner 12中,用户可以通过以下步骤创建数据库模型并自动生成相应的数据库代码: 1. **新建文件**:启动PowerDesigner ...

    PowerDesigner批量生成SQL脚本时将name生成数据库中字段的comment

    在本篇中,我们将探讨如何使用PowerDesigner批量生成SQL脚本来将name属性转换为数据库中字段的comment。 首先,我们需要了解PowerDesigner中的PDM(Physical Data Model),这是一个物理数据模型,它包含了数据库的...

    powerdesigner中去掉生成sql中的引号

    然而,在使用PowerDesigner生成SQL脚本的过程中,有时会遇到生成的SQL语句中包含不必要的引号问题,这可能会导致在某些数据库系统中执行SQL时出现错误或警告。本文将深入探讨如何在PowerDesigner中去除生成SQL中的...

    PowerDesigner生成数据字典(包含反向工程生成方法).docx

    根据给定的部分内容,以下是使用PowerDesigner生成数据字典的详细步骤: 1. **启动PowerDesigner**:首先,打开PowerDesigner软件,创建一个新的物理数据模型(PDM),并选择相应的数据库类型。 2. **执行反向工程**...

    使用PowerDesigner 进行数据建模

    ### 使用PowerDesigner进行数据建模 #### PowerDesigner简介 PowerDesigner作为一款强大的计算机辅助软件工程(CASE)工具,被广泛应用于数据库设计与管理信息系统的分析设计工作中。它由Sybase公司开发,能够全面...

    Powerdesigner生成项目构架

    总之,使用 Powerdesigner 15.0 结合 Eclipse 和 Hibernate,可以通过系统化的方法创建数据库模型、配置映射关系以及生成 Java 代码,极大地提高了开发效率和代码质量。在实际操作中,需要注意配置的准确性,以及对...

    PowerDesigner生成ER图

    PowerDesigner支持代码生成功能,能直接从ER图生成SQL脚本或数据库表结构,大大提高了开发效率。 4. **文档记录** ER图作为设计文档的一部分,便于项目维护和后期扩展。 总之,PowerDesigner生成的ER图是数据库...

    使用PowerDesigner设计数据库

    7. **代码生成与数据库脚本** 完成模型设计后,PowerDesigner能自动生成SQL脚本,用于创建数据库对象。同时,它还支持生成数据库访问层的代码,适用于多种编程语言,如Java、C#等,加速应用程序的开发。 8. **版本...

    PowerDesigner中自动生成sqlserver字段备注

    然而,在使用PowerDesigner生成SQL Server数据库时,一个常见的痛点是,默认情况下,它不会自动为数据库字段添加备注或注释,这在后续的数据库维护和理解上造成了一定的不便。本文将详细介绍如何在PowerDesigner中...

    狼奔代码生成器使用手册

    【狼奔代码生成器使用手册】是一份详细指导程序员如何高效利用狼奔代码生成器进行ASP.NET项目开发的文档。该工具基于.NET 4.0技术平台,旨在整合开发经验和知识,自动化生成ASP.NET页面及后台代码,减轻程序员的重复...

    PowerDesigner15使用时的十五个问题

    从标签"源码 工具"来看,内容可能涵盖了如何利用PowerDesigner进行代码生成,特别是与源码相关的部分。这可能涉及通过Object Oriented Model(面向对象模型)来生成NHibernate实体类、映射文件以及数据访问层的代码...

    powerDesigner_表备注生成

    ### PowerDesigner 表备注生成详解 #### 一、PowerDesigner简介 PowerDesigner是Sybase公司推出的一款优秀的数据库设计工具,广泛应用于数据建模、数据库设计、仓库建模以及元数据管理等多个方面。它支持多种数据库...

Global site tag (gtag.js) - Google Analytics