|
|
近些日子BlogChina在忙着升级新系统,很多天都不能发布文章,而我也在忙着修改AppFuse的XDoclet的自定义模板,我使用了XDT和Delphi结合的方式来生成文件,首先做一个模块,然后优化代码,优化模式,然后抽取模板,再然后用Delphi批量执行Ant命令,同时用Delphi生成POJO和资源文件及一些查询方法,我把查询方法抽取到一个类中,然后模块化,留给Delphi的接口就是表中的字段名,然后用这些字段名拼凑出类似的代码:
// public static Map getZsxcMap(HttpServletRequest request, ZsxcForm zsxc) {
// //得到上一次查找时的valueList信息!
// Map map = ValueListRequestUtil.getRequestParameterMap(request,
// Constants.ZSXC_ID);
//
// if (zsxc == null) {
// return map;
// }
// addCondition(map, zsxc.getId(), "id"); //id
// addCondition(map, zsxc.getLb(), "lb"); //类别
// addCondition(map, zsxc.getGjz(), "gjz"); //关键字
// addCondition(map, zsxc.getMs(), "ms"); //描述
// addCondition(map, zsxc.getXgr(), "xgr"); //修改人
// addCondition(map, zsxc.getXgsj(), "xgsj"); //修改时间
//
// return map;
// }
上面代码的注释都是程序自动从PowerDesinger的设计文档中解析XML格式生成的,这样解决了我的一个以前需要手工添加注释的步骤。
结果,如果只是一个单表的操作,该表和其他的表没有关联的话,那么几乎除了页面需要美化(如添加图标,调用javascriptd)外,代码几乎不用修改,如果需要写">"、"<"的话,要修改一下,但基本能达到80%以上的代码生成量。于是我想,如果以后都这样开发软件,那么基本也没有太多乐趣可言了,大家基本都是Coder了。
对于多表关联的模板正在修改中,但对于多表关联的代码需要考虑Hibernate的关联和代码优化,还要考虑自动生成的POJO的先后顺序,所以,代码的自动生成量也许没有事先估计的高,但保守估计会超过50%,最近因为写这些模板,想起2003年我使用过的一个Domino的开发平台,那个平台自动化程度也挺高,当时有些疑惑,它后台的代码是怎么优化自动生成的,近些天对那个问题有所领悟,感觉其实Web应用完全可以适用一种新的思路来开发,以前也看到过有些朋友说对代码自动生成不感兴趣或者不屑一顾,我个人感觉如果可以减少繁琐的重复性的劳动,那也未尝不可一试,目前的项目进度很紧,如果不用代码自动生成,如期完成几乎不太可能,所以,想出这个办法,也顺便检验一下自己的思路,^_^
目前的代码优化程度个人不是很满意,感觉完全可以再优化,但时间很紧,先实现功能再说,而且即使能够优化的也只是将一些公用的方法抽取到一些独立的类中,尽量减少代码、类之间的耦合度,这些东西慢慢再说吧!
ValueList的确不错,不但可以嵌入HQL,还可以嵌入SQL,我的查询都是基于ValueList的,而且配置文件用Delphi一次性的把数据库中的所有的表的所有字段都生成到配置文件中,需要修改可以手工改,毕竟删除、修改比手工添加容易。
另外,前阶段的ValueList的I18N有个问题困扰我好几天,后来发现ValueList的例子中设置了其他的2个东西,
一个是添加parentMessageSource属性,设置为ref bean="resourceI18nBundle" ,另外还要把resourceI18nBundle的值由i18n改为你自己的资源文件名,在AppFuse中的中文资源文件为:
ApplicationResources_zh_CN。
另外,发现Spring的配置可以按照*来指定一批文件,这倒是很不错的功能,结果我自己写了个文件本应该叫做:application-valuelist.properties的,结果少写了个"t",结果Sping中配置的为application*,所以也没有报错,后来发现了,感觉这样配置虽然有好处,但还是要自己检查自己的文件的命名。
还有XDoclet的自定义模板很有意思,XDoclet提供了许多API,你可以参考《XDoclet In Action》,AppFuse自己还定义了XDTForm的标签,引入了ClassNameLower和ClassNameUpper等方法,结果修改模板变成了简单的copy和paste,干着干着,感觉自己做这种工作真是浪费我的智慧,呵呵:o)
AppFuse还有一个问题,是我今天才发现的,就是如果你没有在Hibernate的文件中指定hbm.xml文件,那么可能不会自动生成其他的文件,而且即使你事后添加了,也不会生成,因为它适用了一个时间戳的东西,不知道怎么比较的,如果你设法改变了那个文件的修改或者创建时间的话,就又会生成了。 |
|