Database2Sharp版本更新之自定義模板生成


代碼生成工具一直是很多從事開發人員的必備,一般開發人員都會選擇一款高效、適合自己開發模式的代碼生成工具,我也不例外,我一直讓我的Database2Sharp( http://www.iqidi.com/database2sharp.htm)代碼生成工具圍繞我的開發框架來生成代碼,至今已經經過快7個年頭的洗禮,主要是提供高效、快速的一鍵生成整個項目框架源碼的操作。

代碼生成工具Database2Sharp自一開始,就采用基於模板方式的代碼生成方式,這樣提高生成效率,並且減少維護成本(相對某些硬編碼代碼生成的方式更優),方便用戶對模板進行適當的修改等特點,不過雖然是提供了模板修改的功能,但是由於在工具的主界面上,並未提供對自定義模板文件的管理,因此以前的版本一直沒有完成用戶自定義模板管理維護的功能,本次版本更新就是彌補這一不足,發揮模板應有的魅力和功能。

在實際開發當中,自定義模板生成是很多代碼生成工具生成代碼的重要補充,例如有些項目代碼片段需要(例如控件賦值語句,或者控件數據顯示語句等),如果能通過自定義模板方式,利用模板引擎的靈活特點,以及已有數據庫的結構信息,就很方便生成重復性強、有一定規律的代碼。

因此,本次Database2Sharp版本更新,主要就是提供一個對自定義模板管理,方便利用自定義模板靈活、高效的特點,並且利用后台數據庫表、字段等信息,為實際的項目代碼片段生成服務,本次還調整了整體的軟件界面布局,利用成熟的Weifenluo布局控件,更好展示多文檔的信息。 


 

 

 我們來看看自定義代碼生成模塊的功能是如何實現的,首先提供一個自定義模板列表進行維護,可以通過右鍵菜單進行添加、修改、重命名、刪除等操作,模板代碼可以進行【直接執行模板】和【選表進行代碼生成】兩種方式。

 

 利用【選表進行代碼生成】方式,可以很好利用后台的數據庫表、字段等信息,結合模板生成高效的代碼,如下所示。

 


另外,為了方便大家對模板引擎NVelocity的了解,在軟件工具安裝的時候,附帶了幾個常見的例子,如下所示。

 

 

 例子的代碼大致如下所示,主要是讓大家快速了解Nvelocity的模板語言VTL的使用。如果對模板引擎更加深入的了解,可以查看我之前的隨筆《強大的模板引擎開源軟件NVelocity》進一步了解。

遍歷及注釋,賦值語句例子。 

##Foreach語法操作函數

# set( $criteria = [ " name "" address "] )
# foreach( $criterion  in $criteria )
    $criterion
#end


##注釋操作

注釋
單行注釋
## This  is a single line comment

多行注釋 
#*
 Thus begins a multi-line comment. Online visitors won ' t
 see  this text because the Velocity Templating Engine will
 ignore it.
*#  


條件結構的例子 

##此處為注釋說明
##簡單例子(主要規則:引用以$開頭用於取得什么東西,而指令以# 開始用於做什么事情)
##在VTL中,所有變量標識符的開頭要加上$字符,如$Name,也可以用一種更加明確的方法表示,例如${name}。

# set($foo =  false)
#if ($foo)
     this  is  true
#elseif ($bar)
     this  is  false
#elseif ( true)
     this should be followed by two blank lines
#end

##  this  is a single line comment

#*
this  is a multi line comment
#if (
*#


# set($user =  " jason ")
# set($login =  false)
# set($count =  5)

#if ($user == "jason")
    the user $user  is logged  in!
#end

#if ($count == 5)
    the count  is  5!
#end

#if ($login == false)
    the user isn ' t logged in.
#end

#if ($count != 3)
    \$count  is not equal to  3

#end  


宏腳本例子 

## #macro 腳本元素允許模板設計者在VTL 模板中定義重復的段。 
## Velocimacros 不管是在復雜還是簡單的場合都非常有用。
## 下面這個Velocimacro,僅用來節省擊鍵和減少排版錯誤,介紹了一些NVelocity宏的概念。 
## 可以帶參數,參數放在宏名稱的后面,空格隔開

#macro( d )
<tr><td></td></tr>
#end
 

#d()


 以及一些常用的賦值及數據顯示代碼片段

         ///   <summary>
        
///  初始化
        
///   </summary>
        
///   <param name="info"> 實體類信息 </param>
         private  void InitData(${ClassName}Info info)
        {
# foreach($ColumnInfo  in ${TableInfo.ColumnList.Values})        
#if(${ColumnInfo.AutoIncrement} == false)    
#if(${ColumnInfo.NetType} == "System.String" )
             this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()};
#elseif(${ColumnInfo.NetType} ==  " System.DateTime ")
             this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToShortDateString();
#else
             this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToString();
#end
#end # #endif
#end
        }        
                
         ///   <summary>
        
///  獲取數據
        
///   </summary>  
         private ${ClassName}Info GetData()
        { 
            ${ClassName}Info info =  new ${ClassName}Info();
# foreach($ColumnInfo  in ${TableInfo.ColumnList.Values})        
#if(${ColumnInfo.AutoIncrement} == false)     
#if(${ColumnInfo.NetType} == "System.Decimal" )
            info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDecimal( this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);
#elseif(${ColumnInfo.NetType} ==  " System.DateTime ")    
            info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDate( this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);        
#else
            info.${ColumnInfo.Name.Alias.ToCapit()} =  this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text;   
#end          
#end # #endif
#end

         }  


 當然,了解這些可能還不夠,還需要了解模板后台,能夠利用的數據屬性等信息,包括數據庫、表、字段等相關的屬性,方便在模板引擎中進行調用,生成更加強大的代碼片段。

軟件安裝后,有一個幫助文件,是提供給開發者進行了解模板后台數據的相關屬性和方法的,如下所示。

 

 運行后如下所示:

 

 

 除了以上新增的功能外,一鍵生成基於我的Winform框架結構的項目代碼,是最為重要的功能,可以體驗一下。另外,代碼生成工具生成的數據庫文檔,快速生成實體類信息等模塊,也是開發非常常用的功能,如果想了解更加關於我的代碼生成工具的信息,可以參考我博客里面的標簽【代碼生成工具】。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM