西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程軟件使用 → CodeSmith代碼生成器是怎么用的?

CodeSmith代碼生成器是怎么用的?

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2017/2/22 15:41:27字體大。A-A+

作者:西西點(diǎn)擊:0次評(píng)論:0次標(biāo)簽: codesmith 代碼生成器

CodeSmith Generator7.1.0中文版
  • 類(lèi)型:編程輔助大小:25.3M語(yǔ)言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

CodeSmith是一款很好用的代碼生成器軟件,對(duì)這款軟件不熟悉的童鞋可能不知道怎么用,它可以和PowerDesigner數(shù)據(jù)庫(kù)設(shè)計(jì)工具一起使用更好,下面解釋如何用CodeSmith實(shí)現(xiàn)預(yù)期的結(jié)果的,事先聲明一下,在此只做一個(gè)簡(jiǎn)單的Demo,并不詳細(xì)的講解CodeSmith各個(gè)強(qiáng)大的功能,有興趣的朋友可以打開(kāi)CodeSmith的幫助文檔了解.我只做個(gè)拋磚引玉,希望能激起大家更多思想的火花~

先看看CodeSmith的工作原理:

簡(jiǎn)單的說(shuō):CodeSmith首先會(huì)去數(shù)據(jù)庫(kù)獲取數(shù)據(jù)庫(kù)的結(jié)構(gòu),如各個(gè)表的名稱(chēng),表的字段,表間的關(guān)系等等,之后再根據(jù)用戶(hù)自定義好的模板文件,用數(shù)據(jù)庫(kù)結(jié)構(gòu)中的關(guān)鍵字替代模板的動(dòng)態(tài)變量,最終輸出并保存為我們需要的目標(biāo)文件.好,原理清楚了,就開(kāi)始實(shí)踐吧:

1. 運(yùn)行CodeSmith,可以看到如下界面:

2. CodeSmith是創(chuàng)建模板的地方,首先當(dāng)然是創(chuàng)建一個(gè)模板啦,點(diǎn)擊工具欄最左邊的New Document—C# Template,如圖所示:

 

3. 點(diǎn)擊運(yùn)行按鈕,運(yùn)行結(jié)果如下:

好,我們來(lái)分析為什么會(huì)得到這樣的運(yùn)行結(jié)果吧,點(diǎn)擊運(yùn)行窗口左下角的Template按鈕返回模板設(shè)計(jì)窗口,可以發(fā)現(xiàn),只要是沒(méi)有被<%%>或者<scriptrunat="template"></script>包含的文字均被直接輸出了,這些以后就要被換成我們分層架構(gòu)中一些一成不變的模板代碼:

4. 好了,簡(jiǎn)單了解啦一些CodeSmith的代碼結(jié)構(gòu),下面就開(kāi)始用它來(lái)生成我們的分層代碼吧,在此我就不介紹分層架構(gòu)的概念了,不然就偏離主題了.為了能更簡(jiǎn)單明了的說(shuō)明,我們?cè)诖司椭挥肅odeSmith生成分層架構(gòu)的實(shí)體層吧.

Major.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entity
{
publicpartialclass Major
{
publicInt32 MajorID{ get;set; }
publicString Name{ get;set; }
publicString Remark{ get;set; }
}
}

Student.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entity
{
publicpartialclass Student
{
publicString StudentID{ get;set; }
publicInt32 MajorID{ get;set; }
publicString Name{ get;set; }
publicBoolean Sex{ get;set; }
publicInt32 Age{ get;set; }
publicString Remark{ get;set; }
}
}

我將兩個(gè)文件中重復(fù)的代碼使用黃色背景色加深了,我們可以發(fā)現(xiàn),如果每個(gè)表都要通過(guò)手動(dòng)創(chuàng)建,那么將有大量的代碼(黃色背景)需要復(fù)制粘貼操作,這些操作是繁瑣而沒(méi)有任何意義的.因此,我們會(huì)希望將黃色背景部分的代碼做成模板,而其他變化的代碼由數(shù)據(jù)庫(kù)的結(jié)構(gòu)動(dòng)態(tài)生成,如此一來(lái),我們就不用再為這些煩人的復(fù)制粘貼操作懊惱了.

5. 那么就開(kāi)始我們的實(shí)踐吧,就在剛剛創(chuàng)建好的文件開(kāi)始吧,先隨意保存到一個(gè)目錄下,命名為test.cst,接著刪除多余的代碼,只保留第一行,該行表明我們的模板使用何種語(yǔ)言,這里我們使用C#.

<%@ CodeTemplateLanguage="C#" TargetLanguage="Text" Src="" Inherits=""Debug="False" CompilerVersion="v3.5"Description="Template description here."%>

6. 參照CodeSmith的工作原理,我們首先要為CodeSmith提供一個(gè)數(shù)據(jù)庫(kù),要怎么使它和SQL Server 2005關(guān)聯(lián)起來(lái)呢?只要加上下面的代碼就行了:

<%-- 加載訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的組件SchemaExplorer,并聲明其使用的命名空間 --%>
<%@ AssemblyName="SchemaExplorer"%>
<%@ ImportNamespace="SchemaExplorer"%>

<%-- 數(shù)據(jù)庫(kù) --%>
<%@ PropertyName="SourceDatabase"DeepLoad="True" Optional="False" Category="01. GettingStarted - Required" Description="Database that the tables views, and storedprocedures should be based on. IMPORTANT!!! If SourceTables and SourceViews areleft blank, the Entire Database will then be generated."%>

7. 好了,有了數(shù)據(jù)庫(kù)連接,接著還需要一個(gè)模板,為了便于管理,我們新建一個(gè)文件用于設(shè)計(jì)模板,FileNewBlank  Template,并添加如下代碼,最好保存到test.cst所在的文件夾內(nèi),命名為Entity.cst:

<%@ CodeTemplateInherits="CodeTemplate"TargetLanguage="Text" Description="NetTiers main template."Debug="True" ResponseEncoding="UTF-8"%>

<%@ AssemblyName="SchemaExplorer" %>
<%@ ImportNamespace="SchemaExplorer" %>

<%-- 要打印的表 --%>
<%@ PropertyName="Table" DeepLoad="True"Optional="False" Category="01. Getting Started - Required"Description="Database that the tables views, and stored procedures shouldbe based on. IMPORTANT!!! If SourceTables and SourceViews are left blank, theEntire Database will then be generated." %>

接著繼續(xù)添加如下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entity
{
publicpartialclass<%= Table.Name%>
{
<%foreach(ColumnSchema col inTable.Columns){ %>
public<%= col.DataType %><%=col.Name %>{ get;set; }
<% } %>
}
}

<%=Table.Name%>          表示在此處輸出表的名稱(chēng)

<%foreach(ColumnSchema col in Table.Columns){ %> <% } %>       為循環(huán)語(yǔ)句,在{}循環(huán)輸出列信息.

<%=col.DataType %>       表示在此處輸出列的類(lèi)型

<%=col.Name %>             表示在此處輸出列的名稱(chēng)

如圖所示:

8. 模板創(chuàng)建好后,要在test.cst文件中注冊(cè)一下,不然人家怎么知道有你這么一個(gè)模板存在呀,在test.cst文件繼續(xù)輸入如下代碼:

<%-- 注冊(cè)實(shí)體層Entity模板 --%>
<%@ RegisterName="EntityTemplate" Template=" Entity.cst"MergeProperties="Flase" ExcludeProperties=""%>

9. 好了,模板注冊(cè)好了,根據(jù)CodeSmith工作原理,我們要結(jié)合模板和數(shù)據(jù)庫(kù)結(jié)構(gòu)來(lái)批量生成代碼啦,但是我們生成的目標(biāo)文件要輸出到哪里呢?這時(shí)我們會(huì)需要一個(gè)用戶(hù)自定義屬性,用于設(shè)置目標(biāo)文件的輸出目錄,在test.cst文件的末尾輸入如下代碼:

10. 現(xiàn)在連輸出目錄也有了,該想辦法寫(xiě)些函數(shù)來(lái)完成將數(shù)據(jù)庫(kù)架構(gòu)傳遞給模板的工作啦,在test.cst文件的末尾輸入如下代碼:

CodeTemplateTemplate = new EntityTemplate();  就是創(chuàng)建了一個(gè)新的模板

foreach(TableSchematable in this. SourceDatabase.Tables){}    表示循環(huán)輸出數(shù)據(jù)庫(kù)中的表

Template.SetProperty("Table",table);                         就是向模板設(shè)置屬性,還記得我們?cè)贓ntity.cst里面設(shè)置了一個(gè)Table屬性嗎,我們就是通過(guò)這個(gè)方法給這個(gè)屬性設(shè)值的.

Template.RenderToFile(FileDirectory,true);               表示將Temlate里的內(nèi)容全部輸出到FileDirectory目錄中,true表示如果文件存在直接覆蓋.

11. 函數(shù)寫(xiě)好了,離成功不遠(yuǎn)啦,我們?cè)趖est.cst的最后再添加如下代碼,用于調(diào)用剛剛寫(xiě)好的函數(shù).至此,模板文件的制作已經(jīng)完成.

<%
//創(chuàng)建實(shí)體層Entity類(lèi)
this.GenerateEntityClasses();

Debug.WriteLine("OK");
%>

12. 好啦,現(xiàn)在只要設(shè)置我們要導(dǎo)出的數(shù)據(jù)庫(kù)和輸出目錄就可以運(yùn)行看結(jié)果啦,點(diǎn)擊CodeSmith主窗體右下角Properities面板中SourceDatabase屬性欄右側(cè)的…按鈕,彈出數(shù)據(jù)庫(kù)設(shè)置對(duì)話(huà)框,我們要在此添加一個(gè)新的數(shù)據(jù)庫(kù)連接:

13. 點(diǎn)擊Add按鈕,屬性設(shè)置如圖,我們選擇的是在前一章用PowerDesigner創(chuàng)建好的PD_test數(shù)據(jù)庫(kù):

14. 點(diǎn)擊OK,回到數(shù)據(jù)庫(kù)選擇對(duì)話(huà)框,選擇剛剛創(chuàng)建好的數(shù)據(jù)庫(kù)連接:

15. 接著是設(shè)置目標(biāo)文件輸出目錄,我在這里設(shè)置為桌面的一個(gè)新建文件夾:

16. OK,萬(wàn)事俱備,可以點(diǎn)擊運(yùn)行按鈕讓CodeSmith為我們批量生成代碼啦:

打開(kāi)生成的文件,就可以看到我們期待看到的代碼啦:

好了,這些是基礎(chǔ),但是只要你掌握了這些就可以開(kāi)始自己的CodeSmith之旅啦,我也只能送大家到此咯~其他更多的知識(shí)點(diǎn)希望大家能自行查看幫助文章或者上網(wǎng)查詢(xún),很高興又和大家分享了自己的一點(diǎn)心得,接下來(lái)想再回頭復(fù)習(xí)一下設(shè)計(jì)模式,也打算寫(xiě)一些文章,歡迎大家關(guān)注~

    代碼生成器
    (17)代碼生成器
    西西軟件園提供好用的代碼生成器軟件下載,強(qiáng)大的代碼生成功能,強(qiáng)大的模板代碼生成引擎,可根據(jù)模板生成各種代碼.支持新建整個(gè)項(xiàng)目和批量代碼生成功能.自動(dòng)生成增刪改查的存儲(chǔ)過(guò)程和數(shù)據(jù)記錄的腳本.完全可以自定制的開(kāi)源代碼生成模板組件管理.多種數(shù)據(jù)庫(kù)支持。...更多>>

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)