nodejs + edge + ejs + c#
NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
背景
自从第一次接触代码生成器,就爱上她了。用过ComeSmith和T4,这些代码生成器确实很优秀,为何我还要DIY自己的呢?有如下几点理由:
T4的元数据定义太麻烦,还要定义强类型的元数据类型。 一直希望用一款动态语言作为工具。今天就介绍一下,如何用 nodejs + edge + ejs + c#,打造属于自己的代码生成器。核心外部库介绍:
edge:允许在nodejs中调用c#代码。 ejs:基于nodejs的模板引擎。思路 常见的代码生成器都支持从数据库生成代码,因此思路可以分为两大步骤:一、读取数据库元数据;二、基于模板生成代码。
读取数据库元数据可以用 edge + c#的一个 开源类库 。
基于模板生成代码可以用 ejs。
实现( 代码下载 )
项目结构
核心代码
SchemaReader.cs
1 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。
第二章 需求分析与需求文档
第二章 需求分析与需求文档
什么是需求分析呢?需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求。在网页开发当中的“需求分析”就是确定要计算机做什么,所以必须要搞清楚需要什么数据,要得到什么结果,最后输出什么这三方面问题。
软件需求包括三个不同的层次:业务需求、用户需求和功能需求。
业务需求 (Business requirement) 表示企业或客户高层次的目标 。业务需求描述了企业为什么要开发一个网站,也就是希望网站达到的目标,他们通常来自项目投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。使用前景和范围(vision and scope)文档来记录业务需求,这份文档有时也被称作项目轮廓图或市场需求(project charter 或 market requirement)文档.
用户需求 (user requirement) 表示的是用户的目标,或用户要求系统必须能完成的任务 。用户需求是从不同的视角,站在用户的角度采集了用户的具体需求描述,加以整理,写出一份文档。也就是说用户需求描述了用户能使用系统来做些什么。
功能需求 (functional requirement) 规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求 。功能需求有时也被称作行为需求(behavīoral requirement),因为习惯上总是用“应该”对其进行描述:“系统应该发送电子邮件来通知用户已接受其预定”。功能需求描述是开发人员需要实现什么。
那么需求分析是怎么样的一个过程呢?通过多年工作经验建议采用以下步骤形成网站开发需求:
获取用户需求→用户需求分析→编写需求文档→评审需求文档→管理需求。
下面我们逐步讨论上述做法。
原本获取用户的需求是一个简单的过程,只要客户提供一个完整的需求说明即可,但是事实却非如此,很多客户对自己的需求并不是很清楚,需要您不断引导和帮助分析。曾经有一次,我问客户:“您做网站的目的是什么?”他回答:“没有目的,只是因为别人都有,我没有!”。这样的客户就需要耐心说明,仔细分析,挖掘出他潜在的,真正的需求,配合客户写一份详细的,完整的需求说明会花很多时间,但这样做是值得的,而且一定要让客户满意,签字认可。把好这一关,可以杜绝很多因为需求不明或理解偏差造成的失误和项目失败。
得到用户的需求还要进行深入的分析和整理。分析用户的需求可以遵守下面几条常见的准则:
⑴对于用户提出的每个需求都要知道“为什么”,并判断用户提出的需求是否有充足的理由;
⑵将那种以“如何实现”的表述方式转换为“实现什么”的方式,因为需求分析阶段关注的目标是“做什么”,而不是“怎么做”;
⑶分析由用户需求衍生出的隐含需求,并识别用户没有明确提出来的隐含需求(有可能是实现用户需求的前提条件),这一点往往容易忽略掉,经常因为对隐含需求考虑得不够充分而引起需求变更。
通过对客户的需求分析要使需求说明书达到一下标准就可以了:
1.正确性:每个功能必须清楚描写交付的功能;
2.可行性:确保在当前的开发能力和系统环境下可以实现每个需求;
3.必要性:功能是否必须交付,是否可以推迟实现,是否可以在削减开支情况发生时"砍"掉;
4.简明性:不要使用专业的网络术语;
5.检测性:如果开发完毕,客户可以根据需求检测。
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于nodejs + edge + ejs + c#的详细内容...