代碼生成工具Database2Sharp自一開始,就采用基於模板方式的代碼生成方式,這樣提高生成效率,並且減少維護成本(相對某些硬編碼代碼生成的方式更優),方便用戶對模板進行適當的修改等特點,不過雖然是提供了模板修改的功能,但是由於在工具的主界面上,並未提供對自定義模板文件的管理,因此以前的版本一直沒有完成用戶自定義模板管理維護的功能,本次版本更新就是彌補這一不足,發揮模板應有的魅力和功能。
在實際開發當中,自定義模板生成是很多代碼生成工具生成代碼的重要補充,例如有些項目代碼片段需要(例如控件賦值語句,或者控件數據顯示語句等),如果能通過自定義模板方式,利用模板引擎的靈活特點,以及已有數據庫的結構信息,就很方便生成重復性強、有一定規律的代碼。
因此,本次Database2Sharp版本更新,主要就是提供一個對自定義模板管理,方便利用自定義模板靈活、高效的特點,並且利用后台數據庫表、字段等信息,為實際的項目代碼片段生成服務,本次還調整了整體的軟件界面布局,利用成熟的Weifenluo布局控件,更好展示多文檔的信息。
我們來看看自定義代碼生成模塊的功能是如何實現的,首先提供一個自定義模板列表進行維護,可以通過右鍵菜單進行添加、修改、重命名、刪除等操作,模板代碼可以進行【直接執行模板】和【選表進行代碼生成】兩種方式。
利用【選表進行代碼生成】方式,可以很好利用后台的數據庫表、字段等信息,結合模板生成高效的代碼,如下所示。
另外,為了方便大家對模板引擎NVelocity的了解,在軟件工具安裝的時候,附帶了幾個常見的例子,如下所示。
例子的代碼大致如下所示,主要是讓大家快速了解Nvelocity的模板語言VTL的使用。如果對模板引擎更加深入的了解,可以查看我之前的隨筆《強大的模板引擎開源軟件NVelocity》進一步了解。
遍歷及注釋,賦值語句例子。
# 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
宏腳本例子
## Velocimacros 不管是在復雜還是簡單的場合都非常有用。
## 下面這個Velocimacro,僅用來節省擊鍵和減少排版錯誤,介紹了一些NVelocity宏的概念。
## 可以帶參數,參數放在宏名稱的后面,空格隔開
#macro( d )
<tr><td></td></tr>
#end
#d()
以及一些常用的賦值及數據顯示代碼片段
/// 初始化
/// </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框架結構的項目代碼,是最為重要的功能,可以體驗一下。另外,代碼生成工具生成的數據庫文檔,快速生成實體類信息等模塊,也是開發非常常用的功能,如果想了解更加關於我的代碼生成工具的信息,可以參考我博客里面的標簽【代碼生成工具】。