CodeSmith代碼生成工具介紹

序 員是軟件開發團隊中的最小單位,有什麼任務都只能本身一肩扛起而沒法再往下分配。可是程序員又是聰明的,他們老是能找到不少美妙的辦法來減輕壓力,代碼生 成器就是一個典型的例子。事實上,Visual Studio  2005自己就自帶了代碼生成的功能,好比您在代碼編輯器中輸入關鍵字「for」,而後直接按Tab鍵,代碼生成器便會爲您生成好一段模板式的代碼:html

        static void Main(string[] args)程序員

        {                       數據庫

            for (int i=0;i<length;i++)架構

            {                   編輯器

                               

            }                   函數

        }                       工具

Visual  Studio  2005還能自動生成其它更多形式的代碼,但終究不如CodeSmith那樣強大和豐富,畢竟術業有專攻嘛。CodeSmith是以模板做基礎來爲程序員 生成高質量代碼的,模板可大可小,CodeSmith一次可以生成的代碼量也就可多可少,這主要靠具體問題具體分析。編碼

CodeSmith 的模板是以「.cst」爲後綴名的代碼文件,其風格很是相似於ASP.NET。模板中除了大量固定的代碼之外,還有遍及於各處的元數據 (metadata)。固定代碼就是會被CodeSmith原封不動地輸出的代碼,而元數據則能夠被看做是模板中的變量。spa

CodeSmith是一個基於模板的代碼生成器。模板是所生成代碼的式樣。開發者或架構師可應用CodeSmith來生成任何文本語言的代碼。其結果(生成的代碼)可經過屬性來自定義幷包含在衆多的標準屬性類型之中。另外,用戶還可創建自定義的屬性類型。 .net

   針對.NET Framework而言,性質能夠是任何擁有設計器的.NET對象。例如,它能夠是一個簡單的分配標題的字符串性質。另外一方面,可用TableSchema對象來訪問數據庫表中的一切內容。

   CodeSmith工具的一個強項是它的語法,其與ASP.NET的方法至關。實際上,你使用CodeSmith生成代碼以前必須編寫相應的模板,可使 用C#、VB.NET和JScript.NET進行模板的編寫。事實上,CodeSmith可輸入任何ASCII語言。

  CodeSmith 包括兩個工具,一個是CodeSmithStudio.exe是用來設計和編譯模板;另外一個是CodeSmith.exe是用來運行模板生成代碼的, CodeSmith.exe還能夠與VS.NET集成,成爲VS.NET的一個外部工具。

如下是對CodeSmith實現原理的簡略概述:
一、支持執行代碼塊語法  ,與 Asp.net語法如出一轍
二、支持內聯表達式語法  ,與 Asp.net語法如出一轍
三、 支持Code Behind功能(,與 Asp.net的()相似
四、 支持 函數代碼塊功能,  與Asp.net的函數代碼塊功能 相似
五、支持屬性申明,用於配置模板的屬性.  Asp.net語法不支持.

查看更多精彩圖片

那麼如今咱們就經過一個簡單的模板文件來了解CodeSmith的工做原理:
若是您瞭解ASP.NET的語法,那麼就很好理解CodeSmith模板文件了

   <%@ CodeTemplate ResponseEncoding="UTF-8Debug="TrueSrc="Base.cst.cs" Inherits="BasePage" Language="C#" TargetLanguage="C#" Description="Demonstrates the most basic template." %>

<%@ Property Name="Tables" Type="SchemaExplorer.TableSchemaCollection" Category="Source" Optional="True" %>

<%@ Property Name="Views" Type="SchemaExplorer.ViewSchemaCollection" Category="Source" Optional="True"   %>

<%@ Property Name="MustLog" Type="System.Boolean" Default="true"  Category="Source" %>

<%@ Assembly Name="SchemaExplorer" %>

<%@ Assembly Name="CodeSmith.CustomProperties" %>

<%@ Assembly Name="System.Data" %>

<%@ Assembly Name="System.Design" %>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="SchemaExplorer" %>

<%@ Import Namespace="System.Design" %>

● Description:做爲模板的描述性信息並能夠在該模板的ToolTip中顯示;
● 
Inherits:儘管默認狀況下全部模板都繼承自CodeSmith.Engine.CodeTemplate,但仍然能夠由您來指定模板繼承自其它類(只要該類直接或間接地繼承自CodeSmith.Engine.CodeTemplate);
Src:該屬性使您可以將其它類的功能添加進當前模板,您可以用這個屬性來實現「代碼隱藏」模型;
● 
Debug:當該屬性被設置爲True時,您就可使用System.Diagnostics.Debugger.Break方法來爲您的模板設置斷點;
OutputType:該屬性用於指定以「Normal」、「Trace」或「None」方式輸出模板;
● 
LinePragmas:當該屬性被設置爲True時,模板錯誤將指向源代碼;設置爲False時,模板錯誤將指向編譯後的代碼;
ResponseEncoding:用於設置模板及輸出的編碼,該屬性支持來自於System.Text.Encoding.GetEncoding方法的值,默認狀況下爲ASCII。

     Language 模板語言

     TargetLanguage 建立代碼語言(生成的代碼的語言類型)

把生成的partial文件夾直接複製到邏輯層(BLL)中, BLL添加DAL引用(Subsonic生成DAL文件),這樣就可使用生成代碼了。(邏輯層引用數據庫層)

 

注意:

查看更多精彩圖片

查看更多精彩圖片

 

 

 

 

 

 

下載

相關文章
相關標籤/搜索