代码生成工具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框架结构的项目代码,是最为重要的功能,可以体验一下。另外,代码生成工具生成的数据库文档,快速生成实体类信息等模块,也是开发非常常用的功能,如果想了解更加关于我的代码生成工具的信息,可以参考我博客里面的标签【代码生成工具】。