导航:首页 > 编程语言 > 1688装修代码生成器

1688装修代码生成器

发布时间:2023-12-23 09:39:22

1. 创建代码生成器可以很简单:如何通过T4模板生成代码[下篇]

在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利。借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单。[文中的例子可以从这里下载]目录
二、创建自定义的Generator
三、ProcereGenerator如何被使用?一、多文件代码生成器会带来多大的便利?我们先来直观的感受一下较之《上篇》提供的单一文件的代码生成器,基于多文件的代码生成解决方案会为开发人员带来多大的便利。 同样对于《上篇》创建的数据表T_PRODUCT,之前我们为了生成三个不同的存储过程,我们不得已需要创建3个不同的T4模板文件。实际上我们更需要的方式只需要创建一个T4模板,让我们的SQL Generator自动为我们生成3个包含相应存储过程的.sql附属文件,如左图所示(点击看大图)。有的时候,基于单个数据表的存储过程生成方式我们依然觉得不方便。如果我们能够在T4模板文件中指定的数据表的列表,让我们的SQL Generator为列表的每一个数据表都生成CUD三个存储过程,这样的方式更加具有吸引力。如右图所示(点击看大图),一个订单模块包含两个具有主子关系的两张表(T_ORDER和T_ORDER_DETAIL),现在我们在一个T4模板中指定这两个表明,通过SQL Generator可以帮助我们生成6个包含存储过程的.sql附属文件。甚至有的时候我们连数据表列表都无需指定,让SQL Generator为所有的表都生成相应的存储过程。我的例子中没有提供这样的功能,但是实现自来不会存在任何问题。二、创建自定义的Generator在《上篇》中我创建了一个抽象的ProcereTemplate类,以及三个基于生成CUD存储过程的具体ProcereTemplate:InsertProcereTemplate、UpdateProcereTemplate和DeleteProcereTemplate。它们都将直接服务于我们今天将要提供的基于多文件的SQL Generator。在《上篇》中,这四个Template分别定义在4个不同的TT文件中,3个具体的ProcereTemplate通过<#@include>指令将抽象ProcereTemplate模板文件包含过来。由于我们将要创建的T4模板将会使用到这四个类,如果我们用四个<#@include>指令将四个TT文件包含过来,由于T4引擎将会导致对ProcereTemplate的4次包含,最好将会导致变异问题。个人觉得这应该算是T4引擎解析包含关系的一个局限性,为了解决这个问题我们不得不抽象的ProcereTemplate和三个具体的ProcereTemplate都合并成一个TT文件。T4 ToolBox为类库中为了提供了一个抽象的T4Toolbox.Generator类用于实现多文件的代码生成。为此我们创建一个TT模板文件,定义了如下一个继承自该类的ProcereGenerator。ProcereGenerator的核心是通过属性Templates定义的类型为IEnumerable<ProcereTemplate>的ProcereTemplate列表,这个列表在存储过程中进行初始化。而对于ProcereGenerator的构造函数,处理定义了一个表示数据库连接字符串的databaseName的参数外,并以数组参数的形式指定了生成的存储过程基于的数据表名的列表。<#@ import namespace="System.Collections.Generic" #><#@ include file="ProcereTemplate.tt" #><#@ include file="T4Toolbox.tt" #><#+publicclass ProcereGenerator : Generator{public IEnumerable<ProcereTemplate> Templates{get; private set;}public ProcereGenerator(string databaseName, paramsstring[] tableNames) {if(null == tableNames || tableNames.Length == 0) {thrownew ArgumentNullException("tableNames"); } this.Templates = InitlizeTemplates(databaseName,tableNames); }private IEnumerable<ProcereTemplate> InitlizeTemplates(string databaseName, string[] tableNames) { foreach(string tableName in tableNames) {yieldreturnnew InsertProcereTemplate(databaseName, tableName);yieldreturnnew UpdateProcereTemplate(databaseName, tableName);yieldreturnnew DeleteProcereTemplate(databaseName, tableName); } }protectedoverridevoid RunCore() {foreach(ProcereTemplate tempalte inthis.Templates) { tempalte.RenderToFile(tempalte.GetProcereName() + ".sql"); } }}#>真正的存储过程的T-SQL脚本实现在重写的RunCore中。由于具体的文本转化逻辑都定义在了ProcereTemplate中了,所以在这里我们需要遍历的ProcereTemplate集合中每一个Template对象,调用RenderToFile方法将相应的存储过程的脚本写入以存储过程命名同名的.sql文件中。三、ProcereGenerator如何被使用?我们最后来看看我们创建的ProcereGenerator最终如何被应用于具体的代码生成。其实很简单,我们只需要创建相应的模板文件,通过<#@include>将定义ProcereGenerator类的TT文件包含近来,最后以代码语句调用块(<#StatementCode#>)的形式实力化该对象,并调用Run方法即可。在构造函数中指定数据库连接字符串的名称和数据表名的列表。下面是基于但表的T4模板。<#@ template language="C#" hostSpecific="true" debug="true" #><#@ include file="Templates\ProcereGenerator.tt" #><#new ProcereGenerator("TestDb","T_PRODUCT").Run();#>下面是基于多表的T4模板:<#@ template language="C#" hostSpecific="true" debug="true" #><#@ include file="Templates\ProcereGenerator.tt" #><#new ProcereGenerator("TestDb","T_ORDER","T_ORDER_DETAIL").Run();#>当你代码生成工作执行之后,会多出一个与TT文件同名的附属文件,你需要手工删除掉它。从数据到代码——通过代码生成机制实现强类型编程[上篇]从数据到代码——通过代码生成机制实现强类型编程[下篇]从数据到代码——基于T4的代码生成方式创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]

2. 代码生成器是干什么用的,谁用过

代码生成器是按照特定编码规范输出代码的软件,可以直接生成项目,也可以单页生成

比如动软,生成项目可以选择vs版本的,其实嘛,动软挺垃圾的,不如你去学学orm框架,很简单的,比动软的三层好得多

3. 代码生成器是什么如何根据数据库去产生实体类

我们在编写代码的过程中会发现有很多代码是有规律的,编写起来无味、繁琐。回
这个时候我们可以根答据规律来编写一些程序来生成这些代码,这个生成代码的程序就是代码生成器。
现阶段代码生成器有很多,其中我个人认为CodeSmith的功能最为强大。基本上你想要生成什么样的代码都可以根据模版来生成,模版有自带的,有别人编写的,当然,你觉得不够,也可以自己编写模版。

至于如何根据数据库生成实体类。他的原理是数据库中的字段就是将来生成实体类中的私有变量和属性。
所以我们可以编写模版来读取数据库中的字段,然后来根据数据库中的字段来生成你所需要的变量和属性。

至于Codesmith的具体使用,比较简单,可以到网上搜索一下,有很多的介绍。

阅读全文

与1688装修代码生成器相关的资料

热点内容
怎么在ps抠的图变成矢量文件 浏览:405
口袋妖怪银魂安卓v11 浏览:1
网站上芒果tv的账号都是什么 浏览:104
带公式的表格如何刷新数据 浏览:81
数据标注语音和2d哪个好 浏览:145
保存excel文件的方法 浏览:655
手机上看不到电脑上的文件 浏览:626
关于ps的微信公众号 浏览:612
矩阵论教程 浏览:971
字体文件分系统吗 浏览:921
编程一级考试要带什么证件 浏览:923
extjs表格修改前数据 浏览:612
什么是数据库的函数 浏览:722
oppo手机怎么用数据线连接电脑 浏览:247
恒智天成备份文件在哪里 浏览:976
电脑没联网怎么拷贝文件 浏览:224
wps工具栏怎么换成中文 浏览:338
win7和xp共享文件 浏览:883
苹果4代音量键没反应 浏览:827
怎样打开tif文件 浏览:153

友情链接