代码生成器的存在价值

原创 2004年08月19日 17:51:00

多年前用ASP的时候,就听说了有一种叫做代码生成器的神奇的东西。只需要指定数据库链接,这个代码生成器就能够产生一个界面,然后选择你需要进行生成的数据表,按一下按钮,马上基于这个表的增删改查界面以及对应的ASP程序代码就生成出来,着实方便。当时的我对ASP已经轻车熟路,看了一眼这个工具后,心中评估了一下,然后使用了一把……看到这个工具生成的ASP程序源代码,让人确实有点接受不了——大小写不区分,大段大段的冗余代码。虽然生成的代码确实能够完成特定的业务操作,但是维护性确实太差了。据说后来有一些优质的代码生成器能够生成更好的程序,但是确实是从那个时候开始,代码生成器在我心里成了垃圾代码堆砌的代名词。我情愿自己编写一行一行代码也不愿意用代码生成器。

现在,当专注于某一个行业,某一种特定业务时,你会发现重复性是如此之大。——用户管理在大多数地方都是类似的,只是用户相对的字段有些不一样;用户登录界面、登出界面可能也是一样的,只是把某些图片换一下而已;大部分的业务操作都是增删改查,对于这种操作不断的采用同一种方式进行重复、还得小心出错;权限管理界面看起来也没什么大的不同……也许我们早就烦了。框架在某种程度上保证了项目的质量,但并不能减少编码量;某些框架甚至需要更多的编码(以及学习时间)。例如,与Servlet+JSP方式相比,Struts除了JSP, 还需要编写特定的Form, Action,并在struts-config.xml中加上几行;Tapestry则需要编写.page, .html, 对应的Page类,如果需要验证还得编写Delegate类;至于FreeMaker,Velocity之类界面工作量可能小了一些,但还得需要编写自己的简单框架用以实现MVC模式。Spring集成了这些表示层,看起来比较好……

上述解决方案的根本问题在于,框架只是保证了项目的质量、可维护性,但是没有减少编码量。因此,代码生成器的使用便是理所当然的了。这方面已经有先例了,最有效、最能够显示代码生成的威力的,当属xdoclet的ejb任务。我们知道,创建一个EJB需要同时创建其他四个无聊的接口,xdoclet在这方面将代码生成的威力发挥到了极致。另外,middlegen也能够创建基于数据库,使用Hibernate, Struts, EJB技术的Web应用程序,他能够生成JSP, Hibernate映射文件,Java类,EJB类等。middlegen应该是我见到的最完整的应用程序生成器的雏形,但是他还不足以具体,不足以缩短编码时间。

我思考了几天,在做OpenBUGZ和公司项目的过程中,想出了这种模型:

基础架构:Spring, Hibernate, Tapestry
Spring,Hibernate的好处自不待言,前台没有采用Struts或者WebWork,是因为前两者在界面表示上不够灵活,Struts需要配合Tiles才能实现灵活的布局,WebWork不太熟悉,不知道如何实现灵活的布局。然而在Tapestry中布局的问题几乎不是问题。

应用技术:Ant, Xdoclet, FreeMaker, JUnit
用FreeMaker而不用Velocity是因为前者有更多的支持,而且从我的使用感觉来说,FreeMaker相对较强大。

开发步骤:
1 首先开发者(项目经理或者技术经理)根据需求对整个系统建模,完成基本类图,生成所有的业务模型类;
2 根据业务模型类编写Hibernate映射文件(用xdoclet可能不太方便,特别是业务模型类存在继承关系时);
3 (代码生成)生成对应的DAO接口例如XXXDAO,用来对XXX对象进行增删改查 (如果采用Spring Hibernate Template,这一步可以省略)
4 (代码生成)生成采用Hibernate的DAO实现
5 (代码生成)生成业务逻辑层代码XXXManager,用来调用DAO层实现各种业务逻辑操作;
6 (代码生成)生成XXXManager对应的单元测试
7 (代码生成)生成业务模型类的增删改查界面Html(通过模板)
8 (代码生成)生成界面对应的Tapestry所需要的.page文件
9 (代码生成)如果需要验证,还需要生成需要的Delegate类
10 (代码生成)生成对应的增删改查Page类
11 (代码配置)在Spring的配置文件中配置DAO的事务
12 (代码配置)在Spring的配置文件中配置XXXManager
13 配置数据库链接,利用Hibernate的SchemaExport直接生成数据库
14 生成整个项目的文件结构,包括build.xml,如果需要,也可以生成JBuilder或者Eclipse项目
15 开发:对 XXXManager进行更改,对界面进行修饰。

从上面可以看到,整个项目工作量已经很低了;-) 这样对业务分析人员的要求比较高,要求一次能够分析全面彻底。项目中最后的工作只剩下修改业务逻辑,修改修改页面了。这就是代码生成器的威力。

6个强大的PHP/Mysql代码生成器介绍

一般来说,用PHP和MYSQL编写一个数据库应用程序都会花费很多时间和精力 - 你要设计HTML格式,编写查询,执行验证/错误处理,测试应用程序等大量工作。不过如果你使用PHP代码生成器,您可以节省您...
  • xd43100678
  • xd43100678
  • 2014年02月10日 16:33
  • 15282

贪心算法(四)——最小代价生成树

问题描述 n个村庄间架设通信线路,每个村庄间的距离不同,如何架设最节省开销? 这个问题中,村庄可以抽象成节点,村庄之间的距离抽象成带权值的边,要求最节约的架设方案其实就是求如何使用最少的边、最小的...
  • u010425776
  • u010425776
  • 2017年04月07日 22:56
  • 2328

2015全国硕士研究生计算机考研真题(附答案)

2015年全国硕士研究生计算机考研真题及答案一、单项选择题:140小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项符合题目要求。请在答题卡上将所选项的字母涂黑。 1.已知程序如下:...
  • xuqingbo6686
  • xuqingbo6686
  • 2016年04月18日 11:38
  • 1206

生活中很多“被我们忽视的东西”存在价值

今天下班,因为经理开会,所以错过了回家的班车。我工作的地点在郊区,公交车和出租车都比较少。正发愁怎么回家,突然想起来,可以用打车软件来叫车。也让我想起了以前的事,那时和同学一块打工,司机介绍过一款打车...
  • wk99114wk
  • wk99114wk
  • 2014年08月08日 11:13
  • 218

举例说明关于 Lua闭包 的存在价值

关于Lua的闭包的用法。动态语言闭包是一大特色,但是知道如何产生一个闭包,不知道闭包如果来使用就会变成一个非常尴尬的问题。前几天突然想明白了。跟大家说说。有其他好的理解也欢迎来和俺讨论切磋。for i...
  • spiritring
  • spiritring
  • 2011年02月20日 12:56
  • 5307

举例说明关于 Lua闭包 的存在价值

关于Lua的闭包的用法。 动态语言闭包是一大特色,但是知道如何产生一个闭包,不知道闭包如何来使用就会变成一个非常尴尬的问题。前几天突然想明白了。跟大家说说。有其他好的理解也欢迎来和俺讨论切磋。  ...
  • weiqubo
  • weiqubo
  • 2015年05月30日 14:49
  • 711

论helloworld114(IT行业垂直导航)站点的存在价值

10年前,予刚入IT行业时,混沌不堪,没有方向,没有指导,有的只是不断的努力和奋斗。努力固然重要,然而没有方法的支撑必然事倍功半。予今创业helloworld114,倍感路漫漫其修远兮,需上下而求索,...
  • qq_35952082
  • qq_35952082
  • 2016年08月24日 11:45
  • 346

LDPC 实现代码,具有参考价值

  • 2010年09月12日 14:37
  • 20KB
  • 下载

传奇客户端代码很有研究价值哦!~

  • 2010年03月16日 23:50
  • 1.84MB
  • 下载

数字水印综述加代码,具有很重要的参考价值

  • 2008年12月19日 11:41
  • 2.05MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:代码生成器的存在价值
举报原因:
原因补充:

(最多只允许输入30个字)