好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器

NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器

NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器(下篇)

背景

最近有一个任务,为第三放系统的需要公开WCF服务接口,需求就是:根据需要访问的数据(表)和访问使用的协议自动生成WCF项目。本来打算用T4的,因为最近刚好开始学习Node,就用Node实现了一个简答的代码生成器工具。

上篇地址: http://www.cnblogs.com/happyframework/archive/2013/05/11/3072387.html 。

因为如何实现已经在上篇文章做了介绍,这篇文章就介绍一下如何使用。

如何使用?

第一步:环境要求

Node + .Net4.5 +  我的项目

第二步:文件夹结构

test_database:存放测试数据库(可以自定义)。 templates:存放代码模板(不能自定义)。 outputs:存放生成后的代码(可以自定义)。 test.js:入口程序(名称可以自定义,和templates的相对路径关系不能变)。

第三步:建立模板

Entity.ejs

注意:outs.outputFile可以是一个函数或字符串路径,它指示了输出的文件路径。

  1   <% include includes/header %>
   2  using System.Runtime.Serialization ;
   3   <%
   4  outs.outputFile =  function () {
   5      return util.format('./outputs/%s.cs', table.name) ;
   6  } ;
   7   %>
   8  
  9  namespace <%=  namespace %>
  10   {
  11       [  DataContract  ] 
 12      public class <%=  table.name %>
  13       {
  14   <% 
  15  _.each(table.columns,  function(column) { 
  16   %>
  17           [  DataMember  ] 
 18          public <%= column.dataType.netDataType %><%= column.nullableIndicator %> <%= column.name %> { get ;   set; } 
 19   <% 
  20  }) ;
  21   %>
  22       }
  23  }

第四步:执行模板

  1   var  util = require('util' );
   2   var  _ = require('underscore' );
   3  
  4   var  SchemaReader = require('database_schem_reader' );
   5   var  Generator = require('code_generator' );
   6  
  7   var  schemaReader =  new   SchemaReader(
   8      'System.Data.SqlClient' ,
   9      'Data Source=(LocalDB)\\v11.0;AttachDbFilename=E:\\node\\happy_node\\demo\\code_generator\\test_database\\Test.mdf;Integrated Security=True;Connect Timeout=30'
 10   );
  11  
 12   var  namespace = 'Test' ;
  13  
 14  schemaReader.readAll( function   (error, schema) {
  15      _.each(schema.tables,  function   (table) {
  16           var  generator =  new   Generator();
  17  
 18           generator.generateDirectoryToFiles({
  19              directory: './templates/tables' ,
  20               table: table,
  21               namespace: namespace
  22           });
  23  
 24          console.log(table.name + ' generate success!' );
  25       });
  26  });

第五步:查看结果

Table.cs

  1   using   System;
   2   using   System.Collections.Generic;
   3   using   System.Linq;
   4   using   System.Text;
   5   using   System.Threading.Tasks;
   6   using   System.Runtime.Serialization;
   7  
  8  
  9   namespace   Test
  10   {
  11       [DataContract]
  12       public   class   Table
  13       {
  14  
 15           [DataMember]
  16           public  System.Guid Id {  get ;  set  ; }
  17  
 18           [DataMember]
  19           public  System.String Name {  get ;  set  ; }
  20  
 21       }
  22  }

备注

整个模板工具实现了2个类和4个API方法,代码不超过200行,有兴趣的朋友自己下载,DIY吧。

我个人使用的感觉是比T4更灵活,当然不能替换T4,在项目中,两种工具我都会用。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器的详细内容...

  阅读:46次