使用微软T4 template进行代码生成
使得软件工程高效开发的主要方法是复用。
复用的宗旨是提高设计的内聚性,主要包括:函数,类,模式,组件,框架等等。而有些应用场景并都是可以直接拿来现成代码使用的,有时代码库的代码不是那么容易修改,或者根本就不能修改,或者是创建项目时每次都要初始化的代码。这时,可复用的空白就需要另一种机制来填补。这个机制就是代码生成。
代码生成,很容易理解,就是生成每次都需要的代码,c#中的部分类非常完美的支持了这一功能。代码生成可以考虑使用使用Microsft t4 template。语法和一般的view渲染引擎非常相似,非常类似asp.net web form 的view引擎。很容易上手。
示例代码段(完整示例):
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="$(SolutionDir)\DataModels\bin\Debug\DataModels.dll" #>
<#@ import namespace="DataModels" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
<#
var prjName = "YourProject";
#>
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Validation;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using <#=prjName#>.BusinessLogic.Helpers;
using <#=prjName#>.BusinessLogic.Models;
using <#=prjName#>.DataAccess;
using <#=prjName#>.DataAccess.Models;
using System.Data.Entity.Migrations;
/// <summary>
/// This file is generated from NetGenerator
/// providing basic features of business domain object
/// </summary>
namespace <#=prjName#>.BusinessLogic.Services
{
<#
var assembly = typeof(TableSample).Assembly;
var types = assembly.GetTypes();
foreach(var t in types){
var tableName = t.Name;
var modelName = tableName+"Obj";
var contextClassName = prjName+"Context";
var contextInterfaceName = "I"+prjName;
var repoName = tableName+"s";
#>
以上代码段显示了如何使用t4来生成可复用的代码,在示例中使用了反射获取类与属性信息,而不必每次都敲一遍同样的抽象。其实T4不止可以生成c#,对于java ,cshtml ,javascript, swift等等都可以写一套代码生成库。这样一来,就解决了类库在某些场景难以顺利复用的情况,使得软件开发保持流畅。
使用微软T4 template进行代码生成的更多相关文章
- 用T4 Template生成代码
1 T4语法 T4的语法与ASP.NET的方式比较类似.主要包括指令.文本块.控制块. 1.1 指令 指令主要包括template, output, assembly, import, incl ...
- [转] How to generate multiple outputs from single T4 template (T4 输出多个文件)
本文转自:http://www.olegsych.com/2008/03/how-to-generate-multiple-outputs-from-single-t4-template/ Updat ...
- T4 Template Overview
T4 Template Overview T4 Template的组成 指令区:为模板转换引擎提供指令,控制模板如何被处理 template:模板相关的属性,debug是否可以调试:hos ...
- 把旧系统迁移到.Net Core 2.0 日记(9) -- T4 Template
想着用T4 Template 自动生成代码,省了功夫. 发现T4 Template 挺笨的. 我开始这样写是会报错的 <# var modualName = "CRM" ...
- 【Reship】use of tangible T4 template engine
1.first of all 之前在 “使用T4模板生成代码 – 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “Multipl ...
- t4 template multi file output
1.Manager.ttinclude <#@ assembly name="System.Core"#> <#@ assembly name="Sys ...
- 【关于微软的上一代模板引擎 T4引擎】
导语:国内有名的动软代码生成器用的就是T4引擎......可以自己下载下来用用,批量生成固定模式的代码文件,十分有用........... 示例代码:示例代码__你必须懂的T4模板:浅入深出.rar ...
- sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)
sql的行转列(PIVOT)与列转行(UNPIVOT) 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...
- T4 代码生成 Demo (抽奖程序)
参考自这位大狮的: https://github.com/Pencroff/Dapper-DAL/blob/master/Dapper-DAL/Models/ModelGenerator.tt 项目 ...
随机推荐
- 快用Visual Studio(三)- 代码重构
什么是代码重构 编写代码 | 找到代码 | 修改代码 关于重构的工具 Bracket Matching Selection Cursors Intelligence Parameter hints E ...
- 关于JavaScript对象中的一切(二) -- 继承
先上一张我制作的思维导图.
- java处理json的工具类(list,map和json的之间的转换)
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- java中枚举类的实际应用
知识点:在Java中,使用枚举类,当遇到实例类型有限的类时,并且数据库中用状态码代表一种含义时,如星期,性别,员工登陆某系统的状态等等, 可以考虑使用枚举类 本例子可以仿照,也可以使用自定义的类型处理 ...
- 机器学习 delay learning
计蒜之道总决赛考了机器学习,大多数人都不会所以现场学,然后我看了一些之后放弃了..采取了人力分析的办法,最后果然被学习能力碾压.. 不过机器学习看起来是很有趣的,也听别人说了很多,和别人聊了一些,如果 ...
- [nodejs]国内npm安装nodejs modules失败的几个解决方案
使用npm安装node模块时经常有卡住安装失败的情况,如图所示.原因在于npm服务器在美国,还有就是某强大的防火墙作用.这样的问题导致很多新手放弃使用node,几乎每天都有新手再问这个问题.现在分享一 ...
- 原生javascript-Tab选项卡-面向对象
分析个人用原生JS获取类名元素的代码: getByClassName:function(className,parent){ var elem = [], node = parent != undef ...
- CentOS6.6系统中安装配置Samba的教程
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- Ansible 小手册系列 十五(Blocks 分组)
当我们想在满足一个条件下,执行多个任务时,就需要分组了.而不再每个任务都要用when. tasks: - block: - command: echo 1 - shell: echo 2 - raw: ...
- ( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
一.类型比较 bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,存储大小为 8 个字节.一个字节就是8位,那么b ...