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

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    【转】Rhythm Of The Rain 雨的旋律
    【转】Mysql中文乱码的几个解决方法
    【转】XAMPP不能正常启动Apache的解决方案
    【转】Cotton Fields 家乡的棉花田
    ArrayList排序Sort()方法
    数据库锁表的分析与解决
    数据从Excel到DataSet图解
    C# 多态例子【原创】
    Collection List Set和Map用法与区别 (转载)
    G711 G723 G729线路占多少带宽问题
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/2341927.html
Copyright © 2020-2023  润新知