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,在项目中,两种工具我都会用。

原文地址:https://www.cnblogs.com/Leo_wl/p/3080589.html