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

  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/happyframework/p/3080186.html
Copyright © 2020-2023  润新知