ITPUB??ì3
ITPUB论坛 » Java企业开发 » J2EE应用快速开发暨自动代码生成器实现详解

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: [原创] J2EE应用快速开发暨自动代码生成器实现详解
离线 longlongriver
初级会员



精华贴数 0
个人空间 0
技术积分 22 (51443)
社区积分 1 (43061)
注册日期 2007-1-26
论坛徽章:0
      
      

发表于 2008-4-11 23:20 
J2EE应用快速开发暨自动代码生成器实现详解

希望这篇文章能够对那些正在或即将开发自己团队的J2EE应用快速开发平台(代码生成器)的个人或公司能有所启发!      
“如果能把项目中大量的代码编写工作变得轻松,是多好的一件事! "
       在使用了AppFuse之后,我有个想法,能不能利用velocity这个优秀的模板引擎,用一种更加直观的模式,把开发项目中的重复代码让它自动生成,生成之后的基础代码,按照实际的需求稍作修改便可以运行,极大的提高工作效率。这样的话,程序员就可以从大量的重复劳动中解放出来,将精力更多的投入到业务分析及学习中。
        这个想法一直在我的脑海里横亘不去,尤其在做了大量的重复模块后,深刻体会了重复Coding的那种浪费生命的痛苦后,这种冲动尤为强烈。
         离开旧公司,到了新公司之后,由于职位和公司定位的不同,让我有时间开始把自动代码生成器的开发真正的摆上开发日程上了。
          第一步,自动代码生成器生成的是业务模块,那么底层必须有一套框架能够为它提供支撑,而且这套基础框架要足够灵活,并且和单个模块的耦合性要比较弱。要解耦模块之间的联系,势必要用到MVC分层设计。感谢Java的开放性,使它有这么许许多多的MVC框架可以使用。我采用的当然是目前最流行的SSH(Struts+Spring+Hibernate)的组合(以前项目一直在用,也有些成熟的积累),花了三个月的时间,通过一个项目的实际应用来使这个框架基本成型。其目前功能包括:
       1:灵活完善的权限管理功能(包括用户管理、角色管理、组织机构管理、资源管理、资源角色映射管理...)。原来计划采用开源的JGuard来托管这部分的功能,因为一些特殊的原因放弃了(考虑要和工作流引擎的权限部分做集成),只采用了其权限管理的一些设计思想。
       2:基于Spring的AOP实现的日志和权限管理(通过Spring的代理也将Struts的Action托管了,使的对Action的调用也能被AOP侦测到),这样对每个功能的调用,如果需要日志纪录的话,之间将其配置到Spring的配置文件中就可以了。
        3:UI上实现了类似.NET的Validation验证,这点很重要,想必大家都深刻体会到利用JavaScript或Struts的验证机制来实现前端页面数据验证的痛苦了吧:),我们实现的功能如下图所示:
        
        4、多套UI风格样式。这个不是很必须,但是作为一套成功的系统,良好的用户体验也是必不可少的。
        5、支撑模块:报表引擎(基于JasperReport实现的B/S版本报表),流程引擎其实就我个人来看,工作流引擎才是这套系统的灵魂,有了它,所有流程性应用包括表单、业务流、权限都可以通过配置并结合Beanshell脚本来获得,但由于我们集成的是一套反编译重构的商用流程引擎系统,在这里就不再详细描述了 ,呵呵:),有盗版之嫌啊),以下是我们报表和流程设计器的一些截图:


工作流引擎截图




报表截图


      6、i18n的支持,由于我们有很多国外的客户,这块是必须的。
有了这个基础支撑平台之后,就可以开始着手开放我们的代码生成器了。
        第二步:开发代码生成器。AppFuse基于Ant的自动代码生成模式让我深恶痛绝,究其原因,一句话--“不够人性化”,我们做的首先必须考虑可用性,因此决定采用可视化的UI模式。由于我用的是NetBean编辑器,做可视化的Swing开发不成问题(这点要感谢SUN啊,出了个和VB一样简单的IDE)。我实现的代码生成器的界面如下:
   


  
怎么样?是不是够傻瓜化啊?呵呵,是个人都能用啊!
      从上面大家可以看到,我们这个代码生成器和Hibernate的POJO对象生成工具类似,也是基于数据库的模型来生成代码的,不同的是,我们生成的代码范围更广,不仅包括了POJO对象暨相应的hbm.xml文件,另外还包括相应的DAO(Server层)、相应的Action、Form类、相关的JSP文件(list页面、edit页面、Excel导出页面等等)、资源文件及相关的Struts和Spring的配置子文件(Struts和Spring均支撑将配置拆分成多个配置,我们利用这种特性来减低模块之间的耦合性。)
        至于数据库模型的获得,可以利用JDBC的MetaData(元数据模型)的功能来获得,我们目前维护了表的完整的主键、外键关系(父子表)
第三步:配置模板。有了可视化的数据库表映射模型,也获得了数据库表及其主外键关系的详细信息,接下来当然是根据这些信息来生成代码了。这里我们用了强大的Velocity模板技术,这样不仅可以灵活的处理复杂的表映射对象之间的关系,也能够灵活的进行变更升级。而且我们能够通过所获得的数据库模型,在页面上自动实现基于Javascript的数据验证“非空验证、字符长度验证、数字验证,日期验证”。
         呵呵,通过以上3个步骤的工作,我们的自动代码生成器就大功告成了!目前我们生成的代码可以直接编译通过,通过简单的系统配置后,可以直接在服务器上跑!由于模板种类多,而且模板中自动实现的代码功能已经非常完善了,所以一些特殊的业务需求只需要在自动生成的代码基础上做简单修改就可以了!
        代码生成器投入使用后,对我们项目开发的资源投入的改善是非常明细的,目前基于基础平台和代码生成器的配合,我们已经做了6、7个系统了,平均每个系统的开发时间至少要比以前节约40%,有的项目甚至达到了80%以上(我们最高的一天,处理了40多个表的增、删、该、查的功能,及中文本地化)。而且,另外很重要的一点,生成的代码无形中统一了程序员的设计风格,我们通过这套开发机制,能够最大限度的保证我们开发的系统质量,保证模块可以在不同系统之间的自由迁移,最大限度的实现复用!在项目开发中节省出来的大量时间,也让我们可以去研究更多的开源中间件和系统,来增强我们的基础平台,从而形成一个良性的循环!
我们做了多套模板,能够针对单表操作,及父子表操作来自由组合搭配。以下就是我们系统的一些功能截图,除了中文化之外,基本上没有修改:
单表操作:


父子表关联操作:



[ 本帖最后由 longlongriver 于 2008-8-25 14:54 编辑 ]


只看该作者    顶部
离线 yuan1129
初级会员



精华贴数 0
个人空间 0
技术积分 14 (67686)
社区积分 0 (59896)
注册日期 2002-7-14
论坛徽章:0
      
      

发表于 2008-4-17 11:14 
能否开放源代码,以供大家学习


只看该作者    顶部
离线 longlongriver
初级会员



精华贴数 0
个人空间 0
技术积分 22 (51443)
社区积分 1 (43061)
注册日期 2007-1-26
论坛徽章:0
      
      

发表于 2008-5-11 17:32 
有开源的打算,想搞个类似AppFuse的项目,或类似JasperSoft公司的做法开放源码,具体形式正在考虑,毕竟牵涉公司版权,不是那么简单啊!


只看该作者    顶部
离线 justforregister
SAP


精华贴数 1
个人空间 10
技术积分 40496 (18)
社区积分 10921 (143)
注册日期 2005-6-10
论坛徽章:80
现任管理团队成员开发板块每日发贴之星生肖徽章2007版:猪开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
      

发表于 2008-7-14 20:02 
期待开源


__________________
只看该作者    顶部
离线 yudingchu
儿童心理学=未来


来自 庐山
精华贴数 0
个人空间 46
技术积分 2476 (631)
社区积分 4317 (327)
注册日期 2007-11-1
论坛徽章:9
奥运纪念徽章NBA2008季后赛纪念徽章授权会员生肖徽章2007版:狗2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:自行车
2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:排球   

发表于 2008-7-18 21:30 
上money啊


只看该作者    顶部
离线 awaydog
初级会员



精华贴数 0
个人空间 438
技术积分 29 (41296)
社区积分 2 (31367)
注册日期 2007-8-6
论坛徽章:1
生肖徽章2007版:鼠     
      

发表于 2008-7-18 23:22 



只看该作者    顶部
离线 szhswl_db
好好学习,天天向上


来自 福建
精华贴数 0
个人空间 0
技术积分 328 (5976)
社区积分 53 (4737)
注册日期 2007-1-16
论坛徽章:8
授权会员ITPUB新首页上线纪念徽章    
      

发表于 2008-7-21 10:13 
关注。。。


只看该作者    顶部
离线 FormatMe
我没理讲什么理
长老


精华贴数 0
个人空间 0
技术积分 1343 (1264)
社区积分 23628 (52)
注册日期 2004-4-26
论坛徽章:91
银牌徽章奥运纪念徽章2008北京奥运纪念徽章:皮划艇激流回旋2008北京奥运纪念徽章:体操  
      

发表于 2008-7-21 22:28 
关注


只看该作者    顶部
离线 greenflute


精华贴数 0
个人空间 0
技术积分 7216 (178)
社区积分 162 (2636)
注册日期 2001-10-26
论坛徽章:15
现任管理团队成员ITPUB元老管理团队2007贡献徽章会员2007贡献徽章2008北京奥运纪念徽章:沙滩排球2008年新春纪念徽章
      

发表于 2008-8-7 15:33 



只看该作者    顶部
离线 Sky-Tiger
天王盖地虎


来自 Vancouver
精华贴数 39
个人空间 0
技术积分 160806 (3)
社区积分 46919 (14)
注册日期 2004-2-19
论坛徽章:271
现任管理团队成员ITPUB长老会成员Heart of PUB管理团队2007贡献徽章管理团队2006纪念徽章会员2007贡献徽章
会员2006贡献徽章开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:猴生肖徽章2007版:猪

发表于 2008-8-7 19:59 
自动代码生成除了是写业务无关的部分,否则,大多都没有用!而且性能不高!


__________________
-----孰能浊以静之徐清  孰能安以动之徐生-----  
-----风来疏竹  风过而竹不留声;雁照寒塘  雁去而塘不留影; 故君子事来而心始现  事去而心随空----

----------------
Groovy 研究中...
JAX-WS20(finished)/CXF/ESB/BPEL 研究中...
EJB3(finished)/Hibernate3 研究中...
OSGI/KnopflerFish 研究中...
JBOSS Seam2.0/JSF/AJAX(finished)/ICEFace/ZKoss/Flex3 研究中...
Mysql 研究中...
Spring2.5  研究中...
Blog/Wiki/RSS/ATOM 研究中...
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问