T4模版在代码生成中的应用心得
2013-05-28 11:30
176 查看
转眼之间,我用T4模版已经三年多的时间。三年来,经过几个项目的磨合,在使用上偶有心得,在这里把一些问题一一罗列出来。
2010年9月,我第一次接触EntityFramework3.5,深深的被它类powerdesigner打动,开始琢磨它的使用。当时项目中,有位大拿,老琢磨EF、域模型以及MVC的搭配,对EF进行扩展等等。当时没有新项目,就做各种mode,挺好玩的。
过了一年,2011年,做了一个很小的项目,只有7、8个对象,用EF的关系图生成model,然后生成sql,生成数据库,开始编码等等,一个项目下来,确实能够减少不少工作量,性能还可以忍受,唯一的就是支持的数据库太单一。
过几个月,2012年,又做一个大点的项目,悲剧发生了。设计的不完善,mode老变,数据库结构也跟着变,需要改好多地方;于是就开始查看各个大拿对EF的理解,花费了点时间,什么数据库优先、model优先、代码优先,都有很多例子,最后还是数据库优先才是我需要的。
为什么选数据库优先呢?一般,我们做的系统,都是使用数据库驱动,并且设计的不完善数据库还老变;我们手工改一个地方好呢还是每个地方都改,显然只需要修改数据库一个地方就可以改好所有的地方是最理想的,于是在后来的所有项目中,我都使用数据库优先。
代码优先,在EF4.5出来后提的非常多,我认为仅仅是EF对性能的提升而做的一点点改变,在真实的项目中,工作量有点困难。最后,还是会转化为数据库驱动,在用T4模版生成各个层次的代码。
我用的数据库优先,并不是完整的使用数据库优先,而仅仅是增加了一个层而已,把它最为一个对象的定义以及关系映射罢了,在项目中没有实际的运用。项目中的数据持久层,用传统的sqlhelper还是框架(NHibernate、EF代码优先),都通过T4模版生成相应格式的代码;甚至model、service等,也通过T4模版进行相应的生成。
我通过这种数据库优先的模式,在后来的几个C#、Java项目中,得到了很好的运用,工作量大量的减少。
在对T4模版的使用上,一直有人建议用各种代码生成器,早期,我们也用过,有好的也有不好的,可没有一个能够赶得上T4。别人的代码生成器,要么去用新语言的写模版,要么需要修改代码,才能生成需要的代码,羁绊太多;T4模版,多么的自由,基本没有学习曲线,拿来就可以使用。
当然,目前的EF还有很多缺陷,我认为最大的缺陷是不能读取数据库字段的描述。等待微软对它的修改。
2010年9月,我第一次接触EntityFramework3.5,深深的被它类powerdesigner打动,开始琢磨它的使用。当时项目中,有位大拿,老琢磨EF、域模型以及MVC的搭配,对EF进行扩展等等。当时没有新项目,就做各种mode,挺好玩的。
过了一年,2011年,做了一个很小的项目,只有7、8个对象,用EF的关系图生成model,然后生成sql,生成数据库,开始编码等等,一个项目下来,确实能够减少不少工作量,性能还可以忍受,唯一的就是支持的数据库太单一。
过几个月,2012年,又做一个大点的项目,悲剧发生了。设计的不完善,mode老变,数据库结构也跟着变,需要改好多地方;于是就开始查看各个大拿对EF的理解,花费了点时间,什么数据库优先、model优先、代码优先,都有很多例子,最后还是数据库优先才是我需要的。
为什么选数据库优先呢?一般,我们做的系统,都是使用数据库驱动,并且设计的不完善数据库还老变;我们手工改一个地方好呢还是每个地方都改,显然只需要修改数据库一个地方就可以改好所有的地方是最理想的,于是在后来的所有项目中,我都使用数据库优先。
代码优先,在EF4.5出来后提的非常多,我认为仅仅是EF对性能的提升而做的一点点改变,在真实的项目中,工作量有点困难。最后,还是会转化为数据库驱动,在用T4模版生成各个层次的代码。
我用的数据库优先,并不是完整的使用数据库优先,而仅仅是增加了一个层而已,把它最为一个对象的定义以及关系映射罢了,在项目中没有实际的运用。项目中的数据持久层,用传统的sqlhelper还是框架(NHibernate、EF代码优先),都通过T4模版生成相应格式的代码;甚至model、service等,也通过T4模版进行相应的生成。
我通过这种数据库优先的模式,在后来的几个C#、Java项目中,得到了很好的运用,工作量大量的减少。
在对T4模版的使用上,一直有人建议用各种代码生成器,早期,我们也用过,有好的也有不好的,可没有一个能够赶得上T4。别人的代码生成器,要么去用新语言的写模版,要么需要修改代码,才能生成需要的代码,羁绊太多;T4模版,多么的自由,基本没有学习曲线,拿来就可以使用。
当然,目前的EF还有很多缺陷,我认为最大的缺陷是不能读取数据库字段的描述。等待微软对它的修改。
相关文章推荐
- 数据库生成T4模版在代码生成中的应用心得
- T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
- T4模版生成SpringMVC构造REST代码:第五篇 用T4模版生成Service服务层接口代码
- T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
- T4模版生成SpringMVC构造REST代码:第二篇 用T4模版的准备工作
- T4模版生成SpringMVC构造REST代码:第八篇 用T4模版生成请求实体类代码
- ALinq 使用教程(六) T4 模版生成代码
- T4模版生成SpringMVC构造REST代码:第六篇 用T4模版生成ServiceImpl服务实现层代码
- Linq to Oracle 使用教程(八)使用 T4 模版生成代码
- T4模版生成SpringMVC构造REST代码:小结
- SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
- 代码生成T4模版生成SpringMVC构造REST代码:第八篇 用T4模版生成请求实体类代码
- 原来 Razor 也可以作为模版用来生成代码,看来 T4 即将过时
- T4模版生成SpringMVC构造REST代码:第六篇 用T4模版生成ServiceImpl服务实现层代码
- T4模版生成SpringMVC构造REST代码:第九篇 用T4模版生成控制层代码
- T4模版生成SpringMVC构造REST代码:小结
- T4模版代码生成学习资料
- 属性名称T4模版生成SpringMVC构造REST代码:第三篇 用T4模版生成POCO类代码
- T4模版生成SpringMVC构造REST代码:第五篇 用T4模版生成Service服务层接口代码
- T4模版生成SpringMVC构造REST代码:第七篇 用T4模版生成MyBatis映射文件代码