使用微软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 项目 ...
随机推荐
- 20145327实验三 敏捷开发与XP实践
敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 程序缩进: 结对git的应用 PSP 步骤 耗时 百分比 需求分析 15m 12.5% 设计 30m 25% 代码实现 45m 37.5 ...
- [BZOJ4653 区间]
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- Commons Configuration之三Properties文件
转载自(https://my.oschina.net/u/2000201/blog/486653) Properties文件是流行的应用程序配置文件.当然,Commons Configuration支 ...
- 【Network architecture】Rethinking the Inception Architecture for Computer Vision(inception-v3)论文解析
目录 0. paper link 1. Overview 2. Four General Design Principles 3. Factorizing Convolutions with Larg ...
- Java实习一
简单的二元一次方程求解 import java.lang.Math; import java.util.Scanner; public class Solve{ public static void ...
- 读书笔记: Microsot .NET企业级应用架构设计
Microsot .NET企业级应用架构设计 Dino Esposito Andrea Saltarello 编 陈黎夫 译 人民邮电出版社 第一部分 设计原则 第1章 当代架构师和架构 ...
- Git的基础学习
https://www.w3cschool.cn/git/git-install-setup.html 一.安装 Git官网下载,安装,操作步骤可以百度 二.用户信息配置 配置个人用户名称和邮箱地址: ...
- C#区块链零基础入门,学习路线图 转
C#区块链零基础入门,学习路线图 一.1分钟短视频<区块链100问>了解区块链基本概念 http://tech.sina.com.cn/zt_d/blockchain_100/ 二.C#区 ...
- vim 正则 捕获
在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1 \2等变量来访问捕获的内容. 将捕获内容前后交换,如下: :s/\(\haha\)\(hehe\)/\\/
- centos 6.6 配置xdmcp远程桌面
1.首先安装 xdm软件:yum install xdm vi /etc/X11/xdm/Xaccess: * allow vi /etc/gdm/custom.conf: [security] A ...