模板技术 和 代码生成

    以前在进行面向基于数据库的应用开发的时候,针对一个表的操作往往需要一个单独的dao来进行处理。表的大小成了工作量大小的一个衡量标准。而业务的复杂性则没有体现出来。后来写了一些小小的代码生成程序,但都是半手工操作.对于代码生成技术来说,最重要得就是确定架构,规定模板.这样才能保证系统生成得可靠性.[@more@]

http://youwg.blogdriver.com/youwg/326638.html

Why?

在工业革命之前,人们手工染布,由于工人水平不一和人力所限,染出的布质量和产量都难以让人满意。然后人们开始思考如何制造机器,让机器来染布,这样,速度快,且质量稳定。这个思路广泛的普及到整个制造行业。人类社会的生产力大大提升,开创了工业时代。

在现在的软件开发中,程序员们需要手写代码。为什么不能够让机器写代码呢?那么,以后程序员就不是程序员了,而是设计师,他们设计能够自动写程序的程序。如果这个思路得到普及,软件行业的生产力也会得到飞速的提升,软件开发也会进入一个工业时代。

这个思路就是CodeGeneration。这个技术其实并不是什么新思路,我们平时使用的IDE环境中都大量使用了CodeGeneration。只是这项技术仍然不够普及,大家平时在编写程序的时候,缺少一种代码自动化的意识。

Three strikes and you automate

Three strikes and you automate就是我们所说的自动化意识。当某件事情你重复三遍之后,你就需要自动化它。这个XP中的重构主张是类似的,当你三次发现重复代码的时候,你就需要重构了。从某个角度来说,重构也是代码自动化的一种技术,对于重复的代码,我们会抽取共同点,隔离变化点,保证代码只有一份。而这正是代码自动化的基础。如果你连染布的程序都没有规范,你又如何让机器来帮助你呢?

在当今的主流框架中,例如J2EE和.NET,都大量使用了CodeGeneration技术。

CodeGeneration表现为什么?

那么,既然说CodeGeneration是一种意识,那如果将CodeGeneration落到实处呢?从目前的应用来说,CodeGeneration差不多有以下几种的表现形式:

模板技术

模板一直以来都是CodeGeneration的主要实现手段。C++使用模板来实现泛型机制。而众多的建模工具和IDE工具都使用模板来重用代码。在Apache组织的旗下,有一个名为Velocity的项目,它的目的就是提供一种易用的模板技术。Velocity使用了一种脚本语言,叫做Velocity Template Language (VTL)。目前,Velocity主要用于生成Web站点的动态内容。

面向属性编程

英文缩写虽然同样都是AOP,但面向属性编程(Attribute-Oriented Programming )和面向特征编程(Aspect-Oriented Programming )可不是一回事。面向属性编程是通过在代码中添加元数据(属性)的方式来自动产生代码,添加功能。而这方面最优秀的软件莫过于xDoclet。它的具体实现方式是在Java代码中添加特定意义的JavaDoc tag,从而实现自动产生代码的目的。

MDA

MDA能够将特定的模型转换为特定平台的代码。AndraMDA就是其中的代表者。在具体实现上,AndraMDA主要采用了模板技术,同时,它也利用了xDoclet技术。所以,AndraMDA是在前两项技术的基础上实现CodeGeneration的。

相应的CodeGeneration技术还有很多,以上只是列出了比较有代表性,影响比较广的几种。

CodeGeneration的优势?

高质量

大量的手写代码增加了出错的可能性,而CodeGeneration能够产生一致的代码。而随着技术的发展,当新技术引入到项目中的时候,也只需要维护CodeGeneration。

降低维护成本

开发人员的重点已经不再是维护应用程序,而将会转向维护CodeGeneration。很明显,后者的成本要大大低于前者。这是由CodeGeneration的特性决定的,因为如果CodeGeneration不能够节约成本,那它就不会有存在的价值。

更加优秀的架构

由于CodeGeneration的使用,开发人员将会不得不采用一种极为规范的方式来开发软件,这使得软件的架构异常的清晰和规范。

高涨的士气

开发人员喜欢有挑战的工作,繁琐冗长的重复劳动使得开发团队效率低下。CodeGeneration要求开发人员更富有创造力,这能够提高团队的士气。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/33590/viewspace-779952/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/33590/viewspace-779952/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值