posts - 165,  comments - 876,  trackbacks - 41
         这一版本添加了模板变量的定义,用户完全可以通过模板来描述模板数据的提供;这样大大提高了模板扩展的灵活性。这一版本功能调整主要是以下两方面:

1)修改模板支持变量定义,由插件的propertygrid进行解释模板定义的变量并在模板解释切入到模板中。

2)调整原有代码的生成方式,支持模板定义变量。(用户在编写新的模板时不在需要依赖原有版本固定数据的提供,导致模板处理的内容有所限制),修改原有插入代码没有格式化问题。

通过一个简单的模板例子介绍生成的代码

以下是一个实体生成模板的定义(Entity.cs)

#*define[

var NameSpace = System.String;/*名称空间*/

var tableInfo = CodeFactoryAddin.Base.DBTableInfo,CodeFactoryAddin.Base;/*表结构信息*/

]*#

#set($table=$tableInfo.Table)

#parse("header.vm")

using System;

namespace $namespace

{

 

    [Serializable]

    public class $table.Name

    {

         public $!{table.Name}()

         {

           

         }

#foreach($item in $table.Fields)

         private $item.AppType m$item.Name;

         public $item.AppType $item.Name

         {

              get

              {

                   return m$item.Name;

              }

              set

              {

                   m$item.Name = value;

              }

         }

#end

    }

}

 

#*define[

var NameSpace = System.String;/*名称空间*/

var tableInfo = CodeFactoryAddin.Base.DBTableInfo,CodeFactoryAddin.Base;/*表结构信息*/

]*#

这部分是变量的内容,分别定义了一个String类型的NameSpaceDBTableInfotableInfo.

当类型存在Editor描述的时候,PropertyGrid会自行的处理其信息提供方式。

 

#set($table=$tableInfo.Table)

#parse("header.vm")

using System;

namespace $namespace

{

用过Monorail的朋友对#parse应该比较了解,在模板中插放一个子模板。把公共描述抽取出来:

/*************************************

Company:$!{Company}

Product:$!{Product}

Copyright:$!{Copyright}

Writer:$!{Writer}

EMail:$!{EMail}

CreateTime:$!{createtime}

**************************************/

简单看下生成效果:

 

/*************************************

Company:HFSoft

Product:NClay

Copyright:FanJianHan

Writer:Henry

EMail:henryfan@msn.com

CreateTime:2008-4-2 21:11:45

**************************************/

using System;

namespace Test

{

 

    [Serializable]

    public class Employees

    {

        public Employees()

        {

            //

            // TODO: Add constructor logic here

            //

        }

        private int mEmployeeID;

        public int EmployeeID

        {

            get

            {

                return mEmployeeID;

            }

            set

            {

                mEmployeeID = value;

            }

        }

 

注意:

       新的代码生成模板放在插件的Codes目录下面,原来的TableField目录作废。只需要把新的模板COPYCodes目录插件就能获取得到模板。

 使用演示

下载插件

posted on 2008-04-02 21:32 henry 阅读(2175) 评论(8)  编辑 收藏 所属分类: CodeFactory

FeedBack:
2008-04-02 22:28 | wuchang [未注册用户]
什么时候开始流行都在首页发布软件了?
  回复  引用    
2008-04-03 08:05 | 隨風.NET      
public class EmployeesService
如果类名定义成这样才如何写模板?
  回复  引用  查看    
#3楼 [楼主]
2008-04-03 09:40 | henry      
@隨風.NET
$!{table.Name}Service
可以看下Velocity语法介绍
  回复  引用  查看    
2008-04-03 10:55 | 隨風.NET      
好的 谢谢 请问下可以在模板里面判断某表是否视图吗?
这样就可以根据不同情况生成不同代码了
  回复  引用  查看    
#5楼 [楼主]
2008-04-03 11:33 | henry      
@隨風.NET
直接在模板里是不能的,你可以在变量里提供这些功能方法在模板里调用。
  回复  引用  查看    
2008-04-03 11:46 | 隨風.NET      
能否举个例子呢 没接触过Velocity
另外文件创建向导那里 向导的名称和路径能否在配置文件中设置 这样就能灵活修改模板的名称和路径了

Entity.cs 与 Entity(CSharp).vm 之间有什么关系? 能否说下Velocity的原理及流程?
  回复  引用  查看    
#7楼 [楼主]
2008-04-03 11:55 | henry      
@隨風.NET
在代码生成模中Test.txt模板就有调用变量方法。
由于文件创建向导的情况比较特别(因为存在一个向导里可对应多个模板生成文件,为了方便扩展所以不能设置一个向导对应一个模板),暂时维持现在方式不变。
如果你是单一文件生成可以用文件模板功能
  回复  引用  查看    
#8楼 [楼主]
2008-04-03 11:57 | henry      
@隨風.NET
Entity.cs 与 Entity(CSharp).vm 没有任何关系,都是提供给NVelocity解释。
NVelocity解释文件的后缀名没有规定的,为什么在codes目录下我定义成cs
主要原因就是插件通过这个后缀解释得到文件类型的图标。
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-02 21:53 编辑过
 
 


<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

寻求伯乐,限广州地区有意联系


与我联系

搜索

 

常用链接

留言簿(20)

我参加的小组

我的标签

随笔分类

最新评论

  • 1. re: JQuery实现自定义对话框
  • 你好 我是出版社的编辑,我看到你博客中的内容,感觉写的非常好,如果想把这些内容和更多的人分享,可以和我联系,把这些东西写成书。 我的邮箱:books_522008@yahoo.com.cn ...
  • --庞永庆
  • 2. re: 如何设计业务逻辑?
  • 我赞成定义,这需要丰富的应用经验。 --引用-------------------------------------------------- Ivony...: --引用------------...
  • --Kai.Ma
  • 3. re: 如何设计业务逻辑?
  • 针对LZ提出的,我们如何知道做出来的东西能满足以后的需要呢? 我自己的感觉,在满足自己目前的前提下,留一些适当的余地。 当有新的需求提出,重新检查下有无类似的代码? 如果有,而且发现重写一个新的方...
  • --思考-总结
  • 4. re: 如何设计业务逻辑?
  • 学习了

    第一种,要调整参数,感觉改起来麻烦
    第二种,感觉好很多
  • --未公布
  • 5. re: 如何设计业务逻辑?
  • 看文章,看评论,颇多收获!
  • --水言木

60天内阅读排行