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/