使用微软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 项目 ...
 
随机推荐
- linux信号的介绍
			
1.基本概念 中断: 中断是系统对于异步事件的响应 中断信号 中断源 现场信息 中断处理程序 中断向量表 ...
 - .Net Core  Cookie跨站点共享 会话保持
			
这里使用简单粗暴的方式,只为做个记录. 关键配置: services.AddDataProtection() .SetApplicationName("appname") .Dis ...
 - 从0开始 数据结构 AC自动机 模板(from kkke)
			
AC自动机模板 2.4.1 头文件&宏&全局变量 #include <queue> #define MAXN 666666 #define MAXK 26//字符数量 st ...
 - /nagios/cgi-bin/cmd.cgi无法打开
			
原因分析,nginx不支持post. 解决方法,重新编译nagios 1.vi /nagios-4.0.8/cgi/cmd.c 找到printf("<form method='post ...
 - MySQL MVVC
			
什么是MVVC? MVVC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Contr ...
 - PHP XML Parser 函数
			
PHP XML Parser 简介 XML 函数允许您解析 XML 文档,但无法对其进行验证. XML 是一种用于标准结构化文档交换的数据格式.您可以在我们的 XML 教程 中找到更多有关 XML 的 ...
 - 搭建selenium + Python环境的总结:
			
安装Python+Selenium 写博客是一个不错的选择,首先,是担心自己忘掉,其次,可以供大家做一个参考: 其实,这是自己第一次搭建Python环境(之前用了一周的Idle),还是比较容易的吧: ...
 - Mysql解压版配置环境等
			
背景故事:安装版的mysql和我的本本有仇,最后一步老卡死 1.首先先把下载好的压缩包解压,如下图:
 - ubuntu 16.04网速监控脚本
			
#!/bin/bashif [ $# -ne 1 ];thendev="enp2s0"elsedev=$1fi while :doRX1=`/sbin/ifconfig $dev ...
 - 【转至nmap】nc命令
			
什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...