Java EE领域单兵作战利器之代码自动生成和Grails

引子

    除了普通的R&D部门码农角色外,还有幸被纳入了预研组,想来应该是之前的一些新想法,处理实现的还算及时。

    公司规范流程以后,很多新想法还远达不到立项或需求分析或可行性分析的阶段,领导可能会找相关人员讨论一下,比如 -- “做一个支持总部、分部(一级、二级等),功能和原来的系统类似,互相之间可以同步,工作量和难度有多大” -- 这是一个真实的例子,详情后面再聊 -- 如果你是那个被问的相关人员,会怎么处理?

    我的选择是,既然咱是码农出身,Java EE也干过,那就最短的时间内做个原型出来,这样大家好有个直观的认识,不熟悉这个领域的同事,也才有了可以交流讨论的基础。做好原型,通过原型设计文档及演示暴露所有的重点难点,把问题和决策权合理的抛回去,正所谓不在其位不谋其政,潜心修炼厚积薄发。(实际上领导也希望做个原型出来^_^)

    问题转化为 -- 如何快速做一个比较复杂的系统原型?注意此处的系统原型,不同于单纯的界面展示,是包含实际的功能,如果目标可行的话,开发阶段可以直接拿来复用。照搬SSH + 代码生成,或者之前用的Spring + ibatis + extjs + 代码生成,单兵短期内做完很困难,还完全不需要关心的UI展示,会占用太多的时间和精力。

正文 -- Grails简单介绍

    于是乎,说了这么多,终于引出了本文的重点 -- Grails (http://www.grails.org/

    关于Grails是什么,相信很多人已经了解,这里简单提一下。

    对于Ruby on Rails开发人员,Grails是Groovy on Grails的缩写,是RoR思想在JVM体系中的衍生品

    对于Java EE开发人员,Grails是Spring + Hibernate + 默认去掉XML和注解 + 现有jar包直接可用 + 动态语言Groovy和java可以混用

    摘录 -- “Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。”

    摘录 -- “Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java 技术与当前流行的约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java 代码的无缝集成,同时还可以加入脚本编制语言的灵活性和动态性。”

    关于框架本身怎么使用,相信对于RoR或者Java EE开发人员,甚至不熟悉这些领域的人,都可以比较快的找到切入点,需要注意的是,后续还是需要尽可能多的去了解更多的底层相关的知识内容。

正文中的重点 -- 基于Grails的代码自动生成,能做到何种地步?

    Grails框架本身,提倡领域驱动设计,即从Domain层(Model)对象开始设计;运行web应用后,向下可以自动生成数据库,此时可以从数据库导出建库脚本,以及利用工具反向生成数据库ER模型图;运行web应用后,向上可以自动生成Controller、View,View中包含基本的CRUD增删改功能。这个套路,比较符合新的设计思路以及全新的业务系统开发,另外领域类采用groovy语言编写,估计可以根据领域模型生成groovy对象的工具不是那么好找,需要手工写。

    另外一个比较传统的套路是,先设计数据库ER模型,然后根据模型生成建库脚本,根据建库脚本生成groovy领域类,根据领域类生成Controller、View,然后加入必要的功能,如过滤器、View微调加入查询等等,在文章的这个例子中,就采用了这个套路,效果非常不错,流程如下:

    (1)从原有系统数据库,反向工程生成ER模型图(Enterprise Architect http://www.sparxsystems.com/products/ea/index.html

    (2)参考原有ER模型,优化得到新的ER模型图(工具同上,花费时间最长,依赖于需求,例子中加入了分布式的要求)

    (3)根据新的ER模型图生成建库脚本(工具同上,用的Mysql 5)

    (4)根据建库脚本建库

    (5)根据建库脚本生成Grails的领域模型层(GRAG,http://grag.sourceforge.net/

    (6)Grails里面创建新工程(http://www.grails.org

        (注:现在可以使用基于Eclipse的STS环境来开发,http://www.springsource.com/developer/sts

    (7)拷贝领域类到新工程,生成各种脚手架(Grails内建命令)

    (8)加入各种插件,实现权限管理、操作日志、报表、导出(好像无导入,不太记得了)、国际化、邮件、定时任务、等等(http://www.grails.org/plugins/

    (9)加入过滤器,实现简单的分布式架构下,数据同步时唯一性标识数据的功能

    写出来以后可以看到,事情还是挺多,一个人在比较短的时间内就完成了,现在想想还是略有得意,虽然实际上并没有任何技术上很有难度的事情。最终的效果很理想,讨论后不久,另一个部门有实际的需求,组建了一个在此思路上进行新的系统开发的10人以上团队,里面用到的基于xml动态生成页面的部分,也在另外一个项目需求讨论中起到了作用。

    一句话总结就是,有时间有精力有能力的朋友可以自己造轮子,咱普通码农,起码要练就好的找轮子用轮子的能力(各种基础一定要打好)。写得有点儿累,就到这儿吧,后面有时间再写一个Griffon的,基于Groovy的Java SE框架。

相关推荐