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

 

posted on 2012-02-09 09:57  伍华聪  阅读(7252)  评论(6编辑  收藏  举报

导航