Java应用开发中代码生成工具的作用

发表于:2009-9-16 13:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
java

  近来,随着各种代码生成工具的不断涌现(如SpringSource的Spring Roo、Skyway Builder Community Edition 6.3及Blu Age的M2Spring等),人们又将注意力转移到了这些代码生成工具在企业级Java应用开发中所起的作用。

  模型驱动开发(MDD)正获得越来越多的关注,而在一个典型的Java应用中有些内容完全是可以自动生成的。典型的Java Web应用包含数据访问对象(DAO)类、XML to Java映射文件、Spring、Log4J配置文件等,这些内容其实都是能够自动生成的。

  Roo是个双向代码生成框架,可以生成Spring Web应用所需的大多数基础代码。Roo提供了一个命令行shell,同时具有tab completion、上下文感知操作以及命令行提示等特性;它还会以标准的目录格式构建Spring应用,管理构建配置文件、辅助开发者创建领域对象并能为基于REST的Web UI自动生成Web层代码。

  Skyway Builder Community Edition 6.3于上个月发布,它提供了对Spring MVC的支持,可以根据新建或现有的领域模型生成基于Spring的Java CRUD应用。它集成了Spring DSL,还能生成Spring MVC与Spring Web Flow应用代码。Skyway Builder商业版Skyway Builder Enterprise Edition (EE) 6.3集成了IBM Rational Software Architect以将UML转换为Spring应用代码。此外,它还提供了对DWR(JavaScript/JSON)的支持,可以通过Spring services开发RIA应用;还能够通过JET技术定制项目级的代码生成模板。

  IBM的MDD工具(叫做Rational Rhapsody)支持UML2与SysML、需求跟踪、应用代码生成以及针对测试进行设计(DFT)等特性。Rhapsody是个双向的模型驱动解决方案,可以通过需求图、用例图、序列图、活动图以及状态图捕获项目需求。接下来用户就可以根据模型创建对需求的跟踪链接,这种链接能自动提供跟踪、影响分析以及覆盖文档等功能。Rhapsody还支持模型驱动测试(MDT),所谓模型驱动测试,实际上是一种新的方法论,它将MDD的优点引入到了测试过程中。凭借MDT,工程师可以不断对设计进行模拟以及早定位错误,同时还可以自动化单调乏味的测试、进行基于需求的测试以验证设计是否符合需求,它还能通过IBM Rational Rhapsody Automatic Test Generation Add On根据设计自动创建覆盖率测试。

  最近Blu Age凭借其产品M2Spring也加入到了代码生成工具的阵营。M2Spring联合使用了MagicDraw UML与Blu Age Agile Model Transformation进行建模及自动生成基于Spring架构的应用代码。它能够在服务层(业务规则、应用服务及Web Service)、表示层(用户界面、用户角色及安全策略)和持久层(业务对象、DAO实现及DAO finder)上生成Spring Web应用所需的类和其他代码。M2Spring支持多种模型与JEE技术,如UML 2.2、OCL 2.0、XMI 2.1、EMF UML2 2.x XMI、Struts、Spring及Hibernate.。

  还有一些开发工具也支持代码生成,如Project Lombok和Spoon。Lombok具有如下一些特性:自动生成默认的getter/setter方法、自动化的资源管理(通过@Cleanup注解)及注解驱动的异常处理等。

  InfoQ采访了Spring Roo的项目经理Ben Alex以深入了解Java应用开发中代码生成工具所起的作用。Ben Alex说到大多数的开发者每天都在使用代码生成,无论是通过Eclipse的“getters/setters”特性还是从别的地方拷贝过来一段代码,本质都是如此。其主要动机是尽快为特定的需求实现解决方案,避免每次都花费时间研究最佳的解决办法。现代的代码生成工具的动机也是如此,只不过将应用范围扩大了,从简单的“getters/setters”自动生成到提高应用生产力的层次上,比如构建多层的应用。就像是“getters/setters”自动生成一样,现代的代码生成工具也非常容易使用,其生成的代码与我们自己动手编写的差不多,同时我们还可以轻松修改生成的代码。

  在使用代码生成工具之前,开发者需要注意哪些方面呢?

  开发者可以像评估IDE工具那样来评估代码生成工具。要是我的话,我就会问这个软件会提升个人生产力么?学习和使用曲线如何?我所在的组织允许使用这个软件么?一旦使用之后,要是不想用了能行么?软件的维护力度如何?是否有相应的社区呢?软件的质量如何(未解决的缺陷、最终用户的博客以及架构性的资讯信息数量等等)?能否通过插件的方式轻松增加新的功能呢?

  除了像使用IDE时可能会遇到的问题外,你还需要问自己特定于代码生成工具的问题:从长远来看,这个代码生成工具会持续不断地维护我的代码么(比如提供了哪些双向支持)?操作代码生成工具的方式对我的知识、技能与经验有哪些要求?与我经常使用的IDE的协作能力如何?能否与新版本的IDE协作良好,抑或是安装了新版本的代码生成工具或是IDE时会不会导致崩溃的情况发生?生成的代码是否自然、干净、一致且高效呢?其使用方式是否足够灵活以便让我能按照自然的方式工作?其是否完全是自动化的,还是需要我做一些额外的工作?新版本的代码生成工具(或是插件)不会搞乱我的项目吧?

  在大多数应用中,开发者都需要手工编写业务逻辑与验证规则代码,而这些代码都不太容易自动生成,那代码生成工具是如何解决这个问题的呢?

  Hunt与Thomas在The Pragmatic Programmers一书中提到了两类代码生成方式:被动的与主动的。

  所谓被动生成方式就是只运行一次代码生成工具来生成结果,然后手工维护生成的代码。很多开发者都在IDE的帮助下使用过被动生成方式,如“getters/setters”生成器。被动生成方式的输出结果都是由开发者决定的:他们可以通过命令来生成想要的东西。被动生成方式的缺憾在于开发者必须要手工维护生成的代码,因为生成工具不会再对生成好的代码进行更新了。在你修改了生成代码所依赖的某些内容后这个问题就会变得尤为明显,因为此时生成的代码将会出错,而用户通常都会删掉代码并重新运行生成工具。

  所谓主动生成方式就是每次运行时都会产生相应的结果,它需要一种方式来存储控制信息,这样就能运行并生成所需的结果。控制信息技术的差别非常大,但通常都是自动获取的元数据(比如来自于源代码解析与绑定)与通过Java注解、JavaDoc标记、XML文件、特殊的GUI配置等信息构成的用户首选项的组合。有了这些高质量的主动生成工具(比如Roo),开发者可以像往常一样在标准的源文件中编写自己的逻辑,同时生成工具会检测到源文件的改变并只自动更新受影响的这些文件。因此我们无需告诉系统(比如Roo)想要编写客户化代码了,因为这一切已经成为系统的一部分了。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号