理由 5:使用 AppGen 生成代码
有些人会将代码生成称为代码气味的散播(code smell)。在他们的观点中,如果我们需要生成代码,那么很可能就会做一些错事。我倾向于这种确定自己代码使用的模式和自动化生成代码的能力应该称为代码香味的弥漫(code perfume)。如果我们正在编写类似的 DAO、管理器、操作或控件,并且不想为它们生成代码,那么这就需要根据代码的气味来生成代码。当然,当语言可以为我们提供可以简化任务的特性时,一切都是那么美好;不过代码生成通常都是一个必需 —— 通常其生产率也非常高 —— 的任务。
AppFuse 中提供了一个基于 Ant 和 XDoclet 的代码生成工具,名叫 AppGen。默认情况下,常见的 DAO 和管理器都可以允许我们对任何普通老式 Java 对象(POJO)进行 CRUD 操作,但是在 Web 层上这样做有些困难。AppGen 有几个特性可以用来执行以下任务:
- (使用 Middlegen 和 Hibernate 工具)从数据库表中生成 POJO
- 从 POJO 生成 UI
- 为 DAO、管理器、操作/控制器和 UI 生成测试
在运行 AppGen 时,您会看到提示说 AppGen 要从数据库表或 POJO 中生成代码。如果在命令行中执行 ant install-detailed
,AppGen 就会安装 POJO 特定的 DAO、管理器以及它们的测试。运行 ant install
会导致 Web 层的类重用通用的 DAO 和默认存在的管理器。
为了阐述 AppGen 是如何工作的,我们在 devworks MySQL 数据库中创建了如清单 2 所示的表:
清单 2. 创建一个名为 cat 的数据库表
create table cat ( cat_id int(8) auto_increment, color varchar(20) not null, name varchar(20) not null, created_date datetime not null, primary key (cat_id) ) type=InnoDB;
|
在 extras/appgen 目录中,运行 ant install-detailed
。这个命令的输出结果对于本文来说实在太长了,不过我们在清单 3 中给出了第一部分的内容:
清单 3. 运行 AppGen 的 install-detailed 目标
$ ant install-detailedBuildfile: build.xmlinit: [mkdir] Created dir: /Users/mraible/Work/devworks/extras/appgen/build [echo] [echo] +-------------------------------------------------------+ [echo] | -- Welcome to the AppGen! -- | [echo] | | [echo] | Use the "install" target to use the generic DAO and | [echo] | Manager, or use "install-detailed" to general a DAO | [echo] | and Manager specifically for your model object. | [echo] +-------------------------------------------------------+ [input] Would you like to generate code from a table or POJO? (table,pojo)table [input] What is the name of your table (i.e. person)?cat [input] What is the name, if any, of the module for your table (i.e. organization)? [echo] Running Middlegen to generate POJO...
|
要对 cat 表使用这个新生成的代码,我们需要修改 src/dao/com/ibm/dao/hibernate/applicationContext-hibernate.xml,来为 Hibernate 添加 Cat.hbm.xml 映射文件。清单 3 给出了我们修改后的 sessionFactory
bean 的样子:
清单 4. 将 Cat.hbm.xml 添加到 sessionFactory bean 中
<bean class="..." id="sessionFactory"></bean> <property ref="dataSource" name="dataSource"></property> <property name="mappingResources"> <list></list> <value></value>com/ibm/model/Role.hbm.xml <value></value>com/ibm/model/User.hbm.xml <value></value>com/ibm/model/Cat.hbm.xml </property> ...
|
在运行 ant setup deploy
之后,我们就应该可以在部署的应用程序中对 cat 表执行 CRUD 操作了:
图 4. Cat 列表
图 5. Cat 表单
我们在上面的屏幕快照中看到的记录都是作为代码生成的一部分创建的,因此现在就有测试数据了。
理由 6:文档
我们可以找到 AppFuse 各个风味的教程,并且它们都以 6 种不同的语言给出了:中文、德语、英语、韩语、葡萄牙语和西班牙语。使用风味(flavor) 一词,我的意思是不同框架的组合,例如 Spring MVC 加上 iBATIS、Spring MVC 加上 Hibernate 或 JSF 加上 Hibernate。使用这 5 种 Web 框架和两种持久框架,可以有好几种组合。有关它们的翻译,AppFuse 为自己的默认特性提供了 8 种翻译。可用语言包括中文、荷兰语、德语、英语、法语、意大利语、葡萄牙语和西班牙语。
除了核心教程之外,还添加了很多教程(请参看 参考资料) 来介绍与各种数据库、应用服务器和其他开放源码技术(包括 JasperReports、Lucene、Eclipse、Drools、Axis 和 DWR)的集成。
理由 7:社区
Apache 软件基金会对于开放源码有一个有趣的看法。它对围绕开放源码项目开发一个开放源码社区最感兴趣。它的成员相信如果社区非常强大,那么产生高质量的代码就是一个自然的过程。下面的内容引自 Apache 主页:
“我们认为自己不仅仅是一组共享服务器的项目,而且是一个开发人员和用户的社区。”
AppFuse 社区从 2003 年作为 SourceForge 上的一个项目(是 struts.sf.net 的一部分)启动以来,已经获得了极大的增长。通过在 2004 年 3 月转换到 java.net 上之后,它已经成为这里一个非常流行的项目,从 2005 年 1 月到 3 月成为访问量最多的一个项目。目前它仍然是一个非常流行的项目(有关 java.net 项目统计信息的链接,请参看 参考资料),不过在这个站点上它正在让位于 Sun 赞助的很多项目。
在 2004 年年末,Nathan Anderson 成为继我之后第一个提交者。此后有很多人都加入了进来,包括 Ben Gill、David Carter、Mika G?ckel、Sanjiv Jivan 和 Thomas Gaudin。很多现有的提交者都已经通过各种方式作出了自己的贡献,他们都帮助 AppFuse 社区成为一个迅速变化并且非常有趣的地方。
邮件列表非常友好,我们试图维护这样一条承诺 “没有问题是没有人理会的问题”。我们的邮件列表归档文件中惟一一条 “RTFM” 是从用户那里发出的,而不是从开发者那里发出的。我们绝对信奉 Apache 开放源码社区的哲学。引用我最好的朋友 Bruce Snyder 的一句话,“我们为代码而来,为人们而留下”。目前,大部分开发者都是用户,我们通常都喜欢有一段美妙的时间。另外,大部分文档都是由社区编写的;因此,这个社区的知识是非常渊博的。
结束语
我们应该尝试使用 AppFuse 进行开发,这是因为它允许我们简单地进行测试、集成、自动化,并可以安全地生成 Web 应用程序。其文档非常丰富,社区也非常友好。随着其支撑框架越来越好,AppFuse 也将不断改进。
从 AppFuse 2.0 开始,我们计划迁移到 JDK 5(仍然支持部署到 1.4)和 Maven 2 上去。这些工具可以简化使用 AppFuse 的开发、安装和升级。我们计划充分利用 Maven 2 的功能来处理相关依赖性。我们将碰到诸如 appfuse-hibernate-2.0.jar 和 appfuse-jsf-2.0.jar 之类的工件。这些工件都可以在 pom.xml 文件中进行引用,它们负责提取其他相关依赖性。除了在自己的项目中使用 AppFuse 基类之外,我们还可以像普通的框架一样在 JAR 中对这些类简单地进行扩展,这应该会大大简化它的升级过程,并鼓励更多用户将自己希望的改进提交到这个项目中。
如果没有其他问题,使用 AppFuse 可以让您始终处于 Java Web 开发的技术前沿上 —— 就像我们一样!
参考资料
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- AppFuse:该项目的主页。
- AppFuse Demos:查看演示和视频。
- Struts 2 和 JSF:了解为什么要将这些技术放到一起工作。
- Sun 的 J2EE 项目目录结构指南:AppFuse 非常接近于这些指南。
- Maven 的 Standard Directory Layout:AppFuse 2.0 将转换到这个目录结构上。
- AppFuse 快速入门指南:快速入门并使用 AppFuse。
- AppFuse 教程:深入学习更多有关使用 AppFuse 的知识。
- Apache Axis 集成:如何将 Apache Axis 集成到自己的 AppFuse 项目中。
- Java.net 项目状态:请查看 2005 年 1 月、2 月 和 3 月 的动态。还可以查看 java.net 上的最佳项目 。
获得产品和技术
- AppFuse on java.net:下载不同风味的 AppFuse。
- WebWork:了解这个易于使用的 Web 框架。
- DbUnit:查看更多有关 JUnit 扩展的内容。
- jMock:创建动态仿真对象来简化真正的单元测试。
- Canoo WebTest:自动化 Web 应用程序的 UI 测试。
- HtmlUnit:WebTest 的优秀 JavaScript 支持背后的基础。
- Cargo:自动启动和停止容器。
- Greenbox:一种代码生成框架。
讨论
关于作者
|
|
|
Matt Raible 居住在美国科罗拉多州的丹佛,他在那里是 Spring 和 Web 框架对 Virtuas Open Source Solutions 的实践先驱。他在开放源码领域具有丰富的经验,是这个领域的专家。他在这个领域中既是用户,又是一名开发人员。Matt 是 SourceBeat Publishing 上 Spring Live 的作者。他还为 Apress 的书籍 Pro JSP Third Edition 作出了很大的贡献。他是很多开放源码会议的积极倡导者,包括 ApacheCon、MySQL User's Conference 和 OSCON,同时他还是 http://raibledesigns.com 上一名非常活跃的博客。Raible 的大部分生活都被计算机所包围了,尽管他是在连电都没有的 Montana 长大的。当不工作的时候时,他总是试图让妻子 Julie 成为世界上最幸福的女人,或者与他们的孩子 Abbie 和 Jack 一起玩耍。
|
分享到:
相关推荐
描述中提到的是使用AppFuse 2.0版本的情况,这可能是指一个基于早期MVC架构的示例项目。在AppFuse 2.0时代,它主要支持Struts或 Tapestry 框架,而非现代的Spring Boot。由于描述中提到“没有jar包”,这可能意味着...
为了开始使用AppFuse,首先需要准备一个合适的开发环境。以下是一些基本步骤: 1. **下载AppFuse**: 从AppFuse的官方网站下载最新版本的源码包(本文使用的版本是appfuse-tapestry-1.9.3-src.zip)。将其解压至所需...
### 使用AppFuse构建环境知识点详解 #### 一、概述 AppFuse是一个开源的Java Web应用程序框架,用于快速搭建基于Spring MVC、Spring Security、Hibernate等技术的应用程序。它提供了一套完整的开发模板,使得开发者...
AppFuse是一个集成了众多当前最流行开源框架与工具(包括Hibernate、ibatis、Struts、Spring、DBUnit、Maven、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit、JSTL等(现在还有lucene的,无敌了))于一身的...
**玩转AppFuse:使用AppFuse建设MVC网站** AppFuse是一个开源项目,它提供了一个快速启动MVC(Model-View-Controller)Web应用程序开发的框架。基于Java,AppFuse集成了Spring、Struts2、Hibernate等流行的技术,极...
使用 Maven 的 archetype:generate 命令创建一个新的 AppFuse 项目。在命令行中输入以下命令: ``` mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeGroupId=org.appfuse -...
AppFuse是一个用于启动J2EE项目的工具包,它提供了一种快速而简便的方法来构建基于Java的应用程序。该工具包由Matt Raible创建,他在网络开发领域拥有丰富的经验,并且是多个开源项目的贡献者,包括Roller Weblogger...
AppFuse分为1.x和2.0两个主要版本,其中2.0版是重构建的,采用了Maven 2作为构建工具,而1.x版本则使用Ant。 Maven 2的引入带来了许多优势,包括自动下载依赖项、简化维护(因为所有组件可以一次编译)以及方便最终...
AppFuse 是一个开源项目,旨在简化 J2EE 应用程序的开发过程。它提供了一个基础框架,结合了多种流行的技术和最佳实践,使得开发者能够快速地创建企业级的 Java Web 应用。通过使用 AppFuse,你可以避免从零开始搭建...
为了加速构建过程,可以从 Appfuse 的官方网站下载预先打包好的依赖文件 `appfuse-2.0-rc1-dependencies.zip`,解压后放到 `.m2\repository` 目录下,这样 Maven 就可以直接使用这些文件,而无需下载。 #### 五、...
【MAVEN 搭建APPFUSE】是一个关于使用Maven构建基于AppFuse的应用程序的教程。AppFuse是一个开源项目,旨在简化Web应用程序的开发,它提供了一个基础框架,可以帮助开发者快速启动新项目,整合了Spring、Hibernate、...
AppFuse 是一个开源项目,旨在简化Java Web应用程序的开发。它提供了一个基础架构,开发者可以在此基础上快速构建安全、可扩展的应用程序。AppFuse 2.1 版本是该项目的一个较早版本,但仍然包含了现代Web开发的核心...
AppFuse 是一个开源项目,旨在帮助开发者快速构建J2EE应用...本文提供的示例和步骤是基于一个使用Tapestry、Hibernate和Spring的简单应用,但AppFuse也支持其他技术栈,如Struts、JSF等,可以根据项目需求进行选择。
代码自动生成工具appfuse的中文使用手册
在项目初始化阶段,AppFuse 使用了一个名为 `StartupListener` 的监听器。这个监听器是 Spring 的 `ContextLoaderListener` 和 Servlet API 的 `ServletContextListener` 的子类,它在Web应用程序启动时执行一些关键...
使用appfuse2建立项目原型骨架的步骤 appfuse2 项目原型 骨架