领先一步
VMware 提供培训和认证,助您加速进步。
了解更多本周 Twitter 圈因 SpringOne Europe 传来的消息而热闹非凡。其中一项引起广泛关注的公告是 SpringSource 的全新开源生产力工具,代号为“Roo”。
Roo 是一款精密的往返式代码生成器,它能让创建和演进 Spring 应用程序比您想象的更快更容易。即使您对代码生成有所保留,Roo 仍然值得一试。它包含重要的创新,解决了对代码生成的所有主要反对意见,同时仍能提供最佳实践的 Spring 应用程序,并在应用程序的整个生命周期内保持有用。
这是系列博客的第一篇,我将讨论 Roo,首先是它的总体设计目标和功能,然后是它的使用方法和 Roo 的工程内部原理。考虑到这第一篇博客是介绍性的,让我们先重复一下指导 Roo 开发的使命宣言
Roo 的使命是在不损害工程完整性或灵活性的前提下,从根本上、可持续地提高 Java 开发人员的生产力。
这如何转化为一个工具呢?一位见过 Roo 的会议代表将其描述为“一个坐在后台处理我不愿操心的事情的小精灵”。这个描述特别恰当,原因有二。首先,Roo 确实很“小巧”。它的当前下载大小不到 3 兆字节,它让您可以继续使用您正常的基于 Spring 的 Java 编程模型,并且不需要您采用特殊的 Roo 运行时或构建技术。其次,它确实静静地坐在后台为您处理事务。最重要的是,Roo 不会妨碍您。如果您想自己写一些东西,只管去做,Roo 会默默地负责自动调整相关文件以作响应(即 Roo 支持往返)。如果您想编辑 Java 或 JSP 文件,只管去做。Roo 不需要您使用它的界面。或者如果您想停止使用 Roo,只需退出程序即可。Roo 不会成为您构建系统或运行时的一部分,因此在您万一想要停止使用它的情况下,停止使用 Roo 异常容易。
我们相信 Roo 正好填补了现有 IDE 的强大功能、现代 Web RAD 框架所展示的生产力潜力以及 Java 开发人员对拥有一个按他们希望的方式工作并反映他们所重视的工程原则的强烈渴望之间的空白。这产生了一个非侵入式的后台工具,它非常容易学习使用,可以应用于现有项目和新项目,并以非凡的速度简化世界最佳实践应用程序的开发。
当您拥有易于学习并基于您现有知识、技能和经验的高可用性工具时,更容易提高生产力并享受开发过程。因此,在设计 Roo 时,可用性对我们来说是一个关键的设计因素。我们受到开发者通过 Tab 键补全用户界面(如 *nix shell 提示符)获得的显著生产力优势的影响。但我们更进一步,专门为 Roo 编写了一个 shell。通过提供一个 shell(而不是 GUI 或命令行工具),我们能够实现一个可脚本化、用户友好、易于学习、容错性强的界面。您可以在任何不确定的时候按下 TAB 键,Roo 会完成命令。您可以在需要时输入“hint”并获得针对项目阶段的指导。您可以省略命令中的选项,Roo 会根据您最近的操作自动推断您的意图。您可以输入非法命令,Roo 会小心地撤销失败命令可能造成的任何更改。您可以编写脚本并重新执行它来再次生成您的项目。您甚至不需要完整输入命令——只需输入足够让 Roo 将其识别为唯一的部分即可。而且,您无需安装 IDE 即可从操作系统命令提示符执行所有这些操作。
当然,大多数 Java 开发人员都使用 IDE,并认为它们对其生产力至关重要。因此 Roo 认识到这一点,并在您在 IDE 中处理项目时愉快地继续执行。您不需要任何 Roo 特定的 IDE 插件(尽管我们确实有 SpringSource Tool Suite 的插件,我将在下面进一步讨论)。当然,在您的 IDE 中,您会享受 Roo 设计的便利,它通过代码辅助和调试支持使您的 Java 开发生活变得轻松。您的调试器会像往常一样运行,单步执行构成应用程序的所有代码——包括 Roo 帮助生成的文件。Roo 生成的每个源文件都将正确出现在代码辅助(Ctrl + Space)列表中,因此您无需记住方法签名。
由于 Roo 支持您使用 Java 编程,您将获得正常的增量验证,这有助于我们所有人识别缺失的括号或输入错误的字段名。IDE 重构工具将继续为您服务,即使面对大型开发团队、不断变化的团队成员以及多年的持续开发和维护,也能确保应用程序代码质量保持高水平。最后,目前所有 Roo 注解都采用“Roo*”的命名约定。这种命名约定确保您在需要时可以轻松找到注解——尽管您实际上根本不需要输入任何 Roo 特定的注解。注解本身为您提供了对 Roo 如何帮助您开发的非常细粒度的控制,如果您愿意,可以详细控制成员名称和自定义行为(默认设置也很好用)。
在 SpringSource Europe 大会上,我们还在 SpringSource Tool Suite (STS) 中演示了 Roo 的用法,STS 是我们流行且即将免费提供的基于 Eclipse 的 IDE。这使您可以在 IDE 中享受 Roo 的所有好处。您可以在屏幕底部的“Roo 视图”中输入命令,并立即在您的 Package Explorer 和编辑器中看到更改。或者您可以在编辑器中进行更改,并立即在 Roo 视图中看到 Roo 对您的更改所做的响应。它就是那个坐在您不碍事的地方,为您处理您不想操心的事情的小精灵。
Roo 构建在插件架构之上,支持构建不同类型的 Java 应用程序。目前有大约 18 个“插件”,这些插件旨在支持轻松开发带有独立的基于 JPA 的实体层的请求-响应式 MVC Web 应用程序。Roo 目前包含的一些具体功能如下:
所有这些功能都建立在 Roo 内部的元数据模型之上,该模型是您项目的全面表示。因此,虽然 IDE 等技术提供了成员结构模型,但 Roo 通过提供反映常见开发约定的企业应用程序特定元数据,将其提升到了更高的抽象层次。例如,虽然 IDE 可能知道有一个名为“Foo”的类,其中包含一个名为“persist”的方法,该方法定义了某些参数和返回类型,但 Roo 也拥有这些信息,并包含一系列额外的元数据,例如该方法从逻辑角度的含义。
由于元数据模型,我们将在后续版本中添加到 Roo 的功能将显著扩展,超越请求-响应式 Web 应用程序开发。通过此元数据模型实现的可能性非常广泛,例如包括第四代 Web 应用程序(基于组件、客户端执行技术)的往返管理、往返式 UML 集成、替代持久化模型(例如针对云计算优化)以及往返式富客户端。
欢迎您参与 Roo。虽然我们已经发布了 Roo alpha 版本,但这只是一个非常早期的预览。我们目前正在进行一项投票,以便社区可以就名称提供反馈。恰如其分的是,投票应用程序是在 SpringOne Europe 的主题演讲期间现场开发并部署到云端的。您可以在 http://www.springsource.org/roo 找到这些资源的链接。
正如博客开头所提及的,我将在未来几周内发布更多博客,详细介绍Roo 的用法,以及内部架构和插件的编写方法。在此期间,欢迎您通过 Twitter 上的 #roo 话题标签关注我们的工作。
希望您喜欢使用 Roo。