使用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()
但是在业务逻辑比较复杂的情况下,对象方案和关系方案往往是不相配的,通常在两者之间有一个数据映射器来隔离两者,这时两者是相互不可见的,相互独立演变的。这样,基于表结构的代码生成领域模型的类就行不通了,而应该使用对象模型。而这样的代码生成几乎不需要自己在写代码生成器,可以使用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()
相关文章推荐
- 使用PowerDesigner进行代码生成
- 使用PowerDesigner进行代码生成(转载)
- 使用PowerDesigner进行代码生成(转)
- 使用PowerDesigner进行代码生成
- 使用PowerDesigner进行代码生成 (转)
- 使用PowerDesigner进行代码生成
- 使用PowerDesigner进行代码生成
- 使用PowerDesigner进行代码生成
- 使用PowerDesigner的物理模型生成不同的数据库和转换成OOM模型生成CS实体类代码
- 翻译:Laravel-4-Generators 使用自己定义代码生成工具高速进行Laravel开发
- 使用PowerDesigner 15对现有数据库进行生成图表结构
- 使用Dcxygen对代码进行文档自动生成
- 使用Android Studio进行UI测试与Record Espresso Test自动生成测试代码
- [How To]如何使用Wildfish进行ISeries开发---代码生成篇
- 使用J2EE Spider进行代码生成.
- 使用maven命令行进行反向hibernate reverse hbm code 代码生成
- vue.js学习10之动手使用vue-cli搭建项目及生成的代码进行修改练手
- 怎样使用powerdesigner类图生成代码及反向
- 翻译:Laravel-4-Generators 使用自定义代码生成工具快速进行Laravel开发
- 使用PowerDesigner 15进行逆向工程生成数据库图表时,列的注释问题