NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
2015-03-06 15:39
183 查看
原文:http://www.cnblogs.com/happyframework/archive/2013/05/11/3072387.html
https://happynodejs.codeplex.com/
自从第一次接触代码生成器,就爱上她了。用过ComeSmith和T4,这些代码生成器确实很优秀,为何我还要DIY自己的呢?有如下几点理由:
T4的元数据定义太麻烦,还要定义强类型的元数据类型。
一直希望用一款动态语言作为工具。
今天就介绍一下,如何用 nodejs + edge + ejs +
c#,打造属于自己的代码生成器。核心外部库介绍:
edge:允许在nodejs中调用c#代码。
ejs:基于nodejs的模板引擎。
读取数据库元数据可以用 edge + c#的一个 开源类库 。
基于模板生成代码可以用 ejs。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/1bbef396164319e42e7aa4908351c87a.png)
SchemaReader.cs
SchemaReader.js
这个示例只是验证了这种可能性,这种理念可以延伸到其它工具开发。感谢edge。
https://happynodejs.codeplex.com/
背景
自从第一次接触代码生成器,就爱上她了。用过ComeSmith和T4,这些代码生成器确实很优秀,为何我还要DIY自己的呢?有如下几点理由:T4的元数据定义太麻烦,还要定义强类型的元数据类型。
一直希望用一款动态语言作为工具。
今天就介绍一下,如何用 nodejs + edge + ejs +
c#,打造属于自己的代码生成器。核心外部库介绍:
edge:允许在nodejs中调用c#代码。
ejs:基于nodejs的模板引擎。
思路
常见的代码生成器都支持从数据库生成代码,因此思路可以分为两大步骤:一、读取数据库元数据;二、基于模板生成代码。
读取数据库元数据可以用 edge + c#的一个 开源类库 。基于模板生成代码可以用 ejs。
实现( 代码下载 )
项目结构
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/07/1bbef396164319e42e7aa4908351c87a.png)
核心代码
SchemaReader.cs1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 using DatabaseSchemaReader; 8 using DatabaseSchemaReader.DataSchema; 9 10 using Happy.Edge.DatabaseSchemaReader.Extentions; 11 12 namespace Happy.Edge.DatabaseSchemaReader 13 { 14 public sealed class SchemaReader 15 { 16 public async Task<object> AllTables(object options) 17 { 18 dynamic dynamicOptions = options; 19 20 var dbReader = new DatabaseReader( 21 dynamicOptions["connectionString"], 22 dynamicOptions["providerName"]); 23 24 return dbReader 25 .AllTables() 26 .Select(table => table.ToDynamic()) 27 .ToList(); 28 } 29 } 30 }
SchemaReader.js
1 var edge = require('edge'); 2 var path = require('path'); 3 var ejs = require('ejs'); 4 var fs = require('fs'); 5 6 exports.allTables = edge.func({ 7 assemblyFile: path.resolve(__dirname, './lib/bin/Happy.Edge.DatabaseSchemaReader.dll'), 8 typeName: 'Happy.Edge.DatabaseSchemaReader.SchemaReader', 9 methodName: 'AllTables' 10 }); 11 12 exports.allTables({ 13 providerName: 'System.Data.SqlClient', 14 connectionString: 'Data Source=(LocalDB)\\v11.0;AttachDbFilename=E:\\Happy.Edge\\database_schem_reader\\test_database\\Test.mdf;Integrated Security=True;Connect Timeout=30' 15 }, renderTables); 16 17 function renderTables(error, tables) { 18 tables.forEach(function (table) { 19 renderTable(table); 20 }); 21 } 22 23 function renderTable(table) { 24 var str = fs.readFileSync(__dirname + '/Templates/Entity.ejs', 'utf8'); 25 26 console.log(ejs.render(str, table)); 27 }
备注
这个示例只是验证了这种可能性,这种理念可以延伸到其它工具开发。感谢edge。
相关文章推荐
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器(下篇)
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
- 用NodeJS打造多人在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)
- [NodeJS]Node.js 打造实时多人游戏框架
- NodeJS - NPM - Edge - Connect NodeJs and .Net
- nodejs + edge + ejs + c#
- Nodejs 开发指南 Nodejs+Express+ejs 开发microblog开发心得
- Nodejs HTTP请求的超时处理(Nodejs HTTP Client Request Timeout Handle)
- Node.js Express 从入门到菜鸟(一)——Hello World!+EJS模板+后台传参到前台+分布视图
- 【nodejs】使用Node.js实现REST Client调用REST API
- 【nodejs】 Node.js初探之hello world【转】
- edge.js架起node.js和.net互操作桥梁
- edge.js架起node.js和.net互操作桥梁
- NodeJs:基于Node的代码生成器 之 入门教程
- nodeJS 中文API node.js 中文文档
- Node.JS——NodeJS引用路径的小问题
- 转自cnodejs.org nodejs的mvc
- 关于NodeJS + Express 3 使用 ejs 模板的问题
- 学习NodeJS第一天:node.js引言(转)