使得软件工程高效开发的主要方法是复用。
复用的宗旨是提高设计的内聚性,主要包括:函数,类,模式,组件,框架等等。而有些应用场景并都是可以直接拿来现成代码使用的,有时代码库的代码不是那么容易修改,或者根本就不能修改,或者是创建项目时每次都要初始化的代码。这时,可复用的空白就需要另一种机制来填补。这个机制就是代码生成。
代码生成,很容易理解,就是生成每次都需要的代码,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进行代码生成的更多相关文章

  1. 用T4 Template生成代码

    1 T4语法 T4的语法与ASP.NET的方式比较类似.主要包括指令.文本块.控制块. 1.1    指令 指令主要包括template, output, assembly, import, incl ...

  2. [转] 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 ...

  3. T4 Template Overview

    T4 Template Overview   T4 Template的组成 指令区:为模板转换引擎提供指令,控制模板如何被处理 Ÿ   template:模板相关的属性,debug是否可以调试:hos ...

  4. 把旧系统迁移到.Net Core 2.0 日记(9) -- T4 Template

    想着用T4 Template 自动生成代码,省了功夫. 发现T4 Template 挺笨的. 我开始这样写是会报错的  <#  var modualName = "CRM"  ...

  5. 【Reship】use of tangible T4 template engine

    1.first of all 之前在 “使用T4模板生成代码 – 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “Multipl ...

  6. t4 template multi file output

    1.Manager.ttinclude <#@ assembly name="System.Core"#> <#@ assembly name="Sys ...

  7. 【关于微软的上一代模板引擎 T4引擎】

    导语:国内有名的动软代码生成器用的就是T4引擎......可以自己下载下来用用,批量生成固定模式的代码文件,十分有用........... 示例代码:示例代码__你必须懂的T4模板:浅入深出.rar ...

  8. sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)

    sql的行转列(PIVOT)与列转行(UNPIVOT)   在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...

  9. T4 代码生成 Demo (抽奖程序)

    参考自这位大狮的:  https://github.com/Pencroff/Dapper-DAL/blob/master/Dapper-DAL/Models/ModelGenerator.tt 项目 ...

随机推荐

  1. 20145314郑凯杰《信息安全系统设计基础》第5周学习总结 part B

    20145314郑凯杰<信息安全系统设计基础>第5周学习总结 part B 在前四天的学习中,我主要对课本知识进行了总结,在本周后三天的学习过程中,我进行实践并截图. http://www ...

  2. mongodb入门很简单(3)

     ##简单的mongodb入门命令## 1.show dbs;      //查看当前数据库 2.use databaseName;         //选库 3.show tables/collec ...

  3. 再也不学AJAX了!(三)跨域获取资源 ① - 同源策略

    我们之前提到过,AJAX技术使开发者能够专注于互联网中数据的传输,而不再拘泥于数据传输的载体.通过AJAX技术,我们获取数据的方式变得更加灵活,可控和优雅. 但是AJAX技术并不是一把万能钥匙,互联网 ...

  4. 爬虫框架Scrapy之案例二

    新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(s ...

  5. Vjudge - F - 比前面更简单的模拟

    2017-07-16 07:31:35 writer:pprp 题目介绍:很基础的string用法 题目如下: 读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字 ...

  6. linux主机之间无密钥ssh访问

    ssh-keygen -t rsa ssh-copy-id -i /root/.ssh/id-rsa.pub root@10.0.0.109 # 实现和109互通 vim /etc/hosts DNS ...

  7. Unique Binary Search Trees,Unique Binary Search Trees2 生成二叉排序树

    Unique Binary Search Trees:求生成二叉排序树的个数. Given n, how many structurally unique BST's (binary search t ...

  8. bzoj 1192 鬼谷子的钱袋 数学

    1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MB Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各 ...

  9. centos cgroup配置

    centOS 6:1. 启用cgroup    查看内核是否支持cgroup功能:cat /boot/config-`uname -r` | grep -i rt_group    查看支持的子系统: ...

  10. UVA-10765 Doves and bombs (双连通分量)

    题目大意:给一个n个点的无向连通图,找出删除某个点后的连通块个数. 题目分析:统计一下每个节点属于几个双连通分量,若是割点,得到的便是答案,否则答案为1. 代码如下: # include<ios ...