代码生成工具一直是很多从事开发人员的必备,一般开发人员都会选择一款高效、适合自己开发模式的代码生成工具,我也不例外,我一直让我的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框架结构的项目代码,是最为重要的功能,可以体验一下。另外,代码生成工具生成的数据库文档,快速生成实体类信息等模块,也是开发非常常用的功能,如果想了解更加关于我的代码生成工具的信息,可以参考我博客里面的标签【
代码生成工具
】。

标签: none

添加新评论