多年前用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进行更改,对界面进行修饰。

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

作者Blog:http://blog.csdn.net/mechiland/

转载于:https://www.cnblogs.com/sunsonbaby/archive/2004/12/09/75054.html

代码生成器的存在价值 选择自 mechiland 的 Blog相关推荐

  1. C# 2.0 泛型编程 选择自 shoutor 的 Blog

    C# 2.0 泛型编程     选择自 shoutor 的 Blog 关键字   C# 2.0 泛型编程 出处   C#泛型演示 class Stack<T> {    private T ...

  2. 价值判断和价值选择答题模板_知识科普:抖音账号的价值如何判断呢?

    "站在风口,猪都能飞起来",在新媒体这个大风口中,又要数抖音的来势最为凶猛.不论是个人还是企业,都可以通过抖音账号来树立个人IP以及打造企业品牌影响力. 抖音在积累了大量的用户后也 ...

  3. make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...

    首先问一个问题,你的微信好友有多少个?常联系的有几个?私下见面的有几个?你真心认可的朋友有几个? 很多人微信几千好友,但当他有什么事时,却发现找不到几个可以诉说的人.可以帮忙的人. 我想起网上一个真实 ...

  4. 开发75条(写的不错) 选择自 churujianghu 的 Blog

    1. 你们的项目组使用源代码管理工具了么? 应该用.VSS.CVS.PVCS.ClearCase.CCC/Harvest.FireFly都可以.我的选择是VSS. 2. 你们的项目组使用缺陷管理系统了 ...

  5. asp.net常用函数 选择自 UAM_Richard 的 Blog

    Abs(number) 取得数值的绝对值.    Asc(String) 取得字符串表达式的第一个字符ASCII 码.    Atn(number) 取得一个角度的反正切值.    CallByNam ...

  6. NUnit2.0详细使用方法 选择自 cyp403 的 Blog

    前一段时间,有人问我在.NET里如何进行TDD开发.这个问题促使我想对NUnit做一个详细的介绍.因为我们大家都知道NUnit是在.NET进行TDD的利器. 如果你已经知道很多关于NUnit的应用,请 ...

  7. 华为公司员工待遇全面揭秘 选择自 CQP 的 Blog

    [简介] 总部在深圳,人员共约3万,2003年销售额327亿,2004年销售额462亿,利润在10%左右. [笔试面试] 笔试基本上都是一些技术上的基本功,可能最后一题会考你的逻辑推理能力,诸如FuE ...

  8. Win32学习笔记 第三章 HelloWin 选择自 villager 的 Blog

    Win32学习笔记 作者: 姜学哲(netsail0@163.net) 教材: Windows程序设计(第五版)北京大学出版社  [美]Charles Petzold 著  北京博彦科技发展有限公司 ...

  9. C#重点知识详解(一) 选择自 masterall 的 Blog

    在微软的.NET推出后,关于C#的有关文章也相继出现,作为微软的重要的与JAVA抗衡的语言,C#具有很多优点.本文将选一些C#语言中的重要知识详细介绍, 第一章:参数 1.1 IN 参数 c#种的四种 ...

最新文章

  1. Mybatis的ResultMap的使用
  2. Codeforces 1284E New Year and Castle Building (计算几何)
  3. 【BZOJ1922】【Tyvj1736】【codevs2129】大陆争霸,无语最短路
  4. jenkins远程构建job_jenkins分布式构建job
  5. 报错注入是什么?一看你就明白了。报错注入原理+步骤+实战案例
  6. 存储数据恢复案例_磁盘阵列数据恢复_raid5磁盘掉线数据恢复方法
  7. C语言实现文件分割功能
  8. 计算机维护系统Win8PE,Win8PE x86应急维护系统BIOS-MBR硬盘版
  9. FFmpeg使用滤镜链为视频插入多张图片
  10. python可视化46|最常用6个偏差(Deviation)关系图
  11. 幸存者偏差(survivorship bias)
  12. 为什么ios比android快,那些说ios比Android快的,进来看看!
  13. Qt 之 QNetworkProxy(网络代理)
  14. 月结4 - GR/IR重分类(Regroup) [F.19/OBYP]
  15. 圣斗士星矢服务器维护时间,9月3日服务器维护更新公告
  16. 如何利用Python制作mini翻译器!精通八国语言!
  17. JOS 中的键盘编码
  18. PX4代码学习系列博客(5)——在px4中添加自己的模块
  19. 远距离大容量毫米波太赫兹通信系统设计—大气窗口选择
  20. Netbeans介绍

热门文章

  1. python整体缩进笔记_python笔记1
  2. 公众号 采集 java_Java实现公众号数据的抓取
  3. 初始化mysql的数据库失败_初始化mysql的数据库失败怎么办
  4. 计算机数控系统的软件结构模式,第四章 计算机数控系统(CNC系统)
  5. Android无需权限保存文件,即使使用用户权限,也无法在外部存储上保存文件[Android]...
  6. 计算机组成原理指令译码,计算机组成原理实验报告指令译码器.docx
  7. java 缓存一致性_Java多线程——CPU缓存原理和缓存一致性问题
  8. eclipse html自动对齐,MyEclipse和Eclipse中jsp、html格式化自动排版问题
  9. iis7.0 https访问显示403访问被拒绝_提高网站访问性能——Tomcat优化
  10. 今天的编程语言是怎么来的?