欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用PowerDesigner進(jìn)行代碼生成
很多代碼生成器都選擇了從表結構來(lái)生成領(lǐng)域模型,這樣的方案有一個(gè)前提,就是領(lǐng)域模型和數據庫表結構是同構的,也就是說(shuō)領(lǐng)域模型中的類(lèi)和數據庫中的記錄結構十分吻合,這樣數據庫表結構可以簡(jiǎn)單的直接映射到領(lǐng)域模型。

    但是在業(yè)務(wù)邏輯比較復雜的情況下,對象方案和關(guān)系方案往往是不相配的,通常在兩者之間有一個(gè)數據映射器來(lái)隔離兩者,這時(shí)兩者是相互不可見(jiàn)的,相互獨立演變的。這樣,基于表結構的代碼生成領(lǐng)域模型的類(lèi)就行不通了,而應該使用對象模型。而這樣的代碼生成幾乎不需要自己在寫(xiě)代碼生成器,可以使用PowerDesigner9。

    PowerDesigner9自己就已經(jīng)具有代碼生成功能,你只要建立一個(gè)Object_Oriented Model(語(yǔ)言選擇C#,類(lèi)圖),完成類(lèi)設計后,使用Language菜單下的“Generate C# Code”。生成完后看看代碼文件,所有的屬性都沒(méi)有g(shù)et和set方法,要想生成這兩個(gè)方法,就要自己動(dòng)手修改PowerDesigner的代碼生成模板,可以選擇Language菜單下的“Edit Current Object Language”,在彈出的窗口中修改代碼模板:


可以在value部分看到代碼生成的腳本,如果你使用codesmith等代碼生成工具寫(xiě)過(guò)模板,這段腳本就很容易理解了,只要自己修改下就可以了,例如,我把其中的第三行:[%visibility% ][%flags% ]%dataType% _%Code%[ = %InitialValue%];

這句改成:

private %dataType% _%Code%[ = %InitialValue%];

public %dataType% %Code%

{

get

{

return _%Code%;

}

set

{

value = _%Code%;

}

}

另外兩個(gè)if分支中的也作相應的修改,再生成一次看看,get和set函數都有了。

C#的代碼模板是PowerDesigner的安裝目錄下的Resource Files\Object Languages目錄下的csharp.xol文件,打開(kāi)后可以看到實(shí)際上是一個(gè)xml文件,這樣你就可以自己定義代碼生成的模板了。

上面是使用PowerDesigner直接生成C#代碼,為了通用性考慮,首選xml,可以給對象模型的語(yǔ)言選擇xml Schema,用對象模型生成一個(gè)xsd文件,然后自己來(lái)寫(xiě)一個(gè)代碼生成器,我作了一個(gè)很簡(jiǎn)單的例子,有興趣的朋友可以看看。

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>

我又使用了一個(gè)xml文件作生成器的配置config.xml文件內容:

<?xml version="1.0" ?>

<template>

<xsdfile name='Z:\study\cs\ObjectOrientedModel_1.xsd'/>

<outputdirectory name='z:/csfile'/>

<namespace name = 'dahuzizyd'/>

</template>

我機器上的開(kāi)發(fā)環(huán)境和VS.net有沖突,只好用python寫(xiě)了一個(gè),但是只有不到50行,應該是比較容易讀懂的:

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()
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Web Services學(xué)習路線(xiàn)圖之XML學(xué)習篇-SOA-Java
什么是QName
Vistual Studio自帶的xsd.exe工具,根據XML自動(dòng)生成XSD
如何使用MixedContent數據處理JAXB ComplexType?
xsd schema 語(yǔ)法
XML和Excel
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久