您的位置:首页 > 编程语言

使用PowerDesigner进行代码生成

2006-06-01 20:05 495 查看
很多代码生成器都选择了从表结构来生成领域模型,这样的方案有一个前提,就是领域模型和数据库表结构是同构的,也就是说领域模型中的类和数据库中的记录结构十分吻合,这样数据库表结构可以简单的直接映射到领域模型。

但是在业务逻辑比较复杂的情况下,对象方案和关系方案往往是不相配的,通常在两者之间有一个数据映射器来隔离两者,这时两者是相互不可见的,相互独立演变的。这样,基于表结构的代码生成领域模型的类就行不通了,而应该使用对象模型。而这样的代码生成几乎不需要自己在写代码生成器,可以使用PowerDesigner9。

PowerDesigner9自己就已经具有代码生成功能,你只要建立一个Object_Oriented Model(语言选择C#,类图),完成类设计后,使用Language菜单下的“Generate C# Code”。生成完后看看代码文件,所有的属性都没有get和set方法,要想生成这两个方法,就要自己动手修改PowerDesigner的代码生成模板,可以选择Language菜单下的“Edit Current Object Language”,在弹出的窗口中修改代码模板:

from xml.dom import minidom

import os

#get config

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

# load xsd file

xsddoc = minidom.parse(xsdfilename)

basenode = xsddoc.childNodes[0]

#create .cs file

for node in basenode.childNodes:

if node.nodeType == node.ELEMENT_NODE :

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

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

f.write('using System;\n')

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

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

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

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

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

for elementNode in nodeList :

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

if elementNode.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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: