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://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于nodejs + edge + ejs + c#的详细内容...