NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器(下篇)
背景
最近有一个任务,为第三放系统的需要公开WCF服务接口,需求就是:根据需要访问的数据(表)和访问使用的协议自动生成WCF项目。本来打算用T4的,因为最近刚好开始学习Node,就用Node实现了一个简答的代码生成器工具。
上篇地址: http://HdhCmsTestcnblogs测试数据/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://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did45721