zoukankan      html  css  js  c++  java
  • 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,在项目中,两种工具我都会用。

  • 相关阅读:
    Javascript函数式编程要掌握的知识点讲解
    任务
    怎么添加项目到SVN上面
    随便写一点最近开发遇到的问题和解决方法 大部分关于laravel和php
    laravel 将数组转化成字符串 再把字符串转化成数组
    laravel 配置了自己的域名以后, localhost 无法访问 404 not found 的解决方法
    实习日记15
    php接收post过来的 json数据 例子
    数据库如何让自增id重置
    C#连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/happyframework/p/3080186.html
Copyright © 2011-2022 走看看