用 Anvil 构建企业级 Flex 应用

  • Jon Rose
  • 张凯峰

2009 年 2 月 12 日

话题:Java语言 & 开发架构

在本报道中,Anvil项目的创建者 Ryan Knight 与 InfoQ.com 分享了他自己的开源项目。Anvil 是一个用来帮助更容易地开发企业级 Flex 应用的开源项目。另外,它还为运行 Flex 应用程序提供了一个门户环境。

首先,Ryan 为 InfoQ.com 整体介绍了 Anvil:

介绍一下历史背景可能会帮助大家了解 Anvil。在 2007 年 5 月份,我开始为 Williams Gas Pipelines 编写一个新的企业级 Flex 项目。在当时,Flex 才刚刚开始用于构建企业中的大型应用。我们预见到在使用 Flex 构建大型应用时会遇到很多挑战,所以我们寻求了James Ward的帮助,他是来自于 Adobe 的 Flex 布道者。他提供了如何模块化应用程序,以及如何在应用程序的不同层次处理事件等很多方面的早期指导。作为此次合作内容的一部分,我们决定在核心框架之上启动一个开源项目。

在将 Anvil 从一个实际项目核心框架的一部分独立出来,最让我高兴的是,我能够将我在 Williams 中做的许多工作贡献给开源社区。而且由于它的广泛采用,大量最明显的 bug 都已经得到修复。另外我们还多次与 James 会面,以取得架构方向和编码上的帮助。所以你今天能看到的,是一个高端框架,能够解决开发者在构建大型 Flex 应用时遇到的一些巨大挑战。现在 Anvil 提供了许多有用的功能,比如布局环境、与 Spring Security 集成的安全机制、模块加载和管理,以及许多其他功能。它还提供了一个基于 Flex MDI 项目(现在是 FlexLib 的一部分)的门户框架。这样就提供了布局和窗体的管理。

接下来,Ryan 解释了 Anvil 与其他 Flex 框架有什么不同:

Anvil 跟 Mate 和 Cairgorm 这样的框架相比,解决的是不同的问题。那些框架解决的是 MVC 较低层次的问题。而 Anvil 的重心在于解决像如何有效利用 Flex 架构大型应用这样宏观的问题。大多数情况下,它可以和其他框架共同使用,比如 Mate。可是我们确实发现了 Cairngorm 无法配合工作,因为 Cairngorm 只允许一份运行时的 MVC。通过模块功能,你可以让同一模块加载多次,这样本质上针对每个模块你都有个微 MVC。可这样的情形在 Cairngorm 中是行不通的,比如当某个模块触发事件更新模型的时候。其实这样的更新应该隔离成一个独立的模块,但 Cairngorm 是在全局范围内传递事件的。

至于 Anvil 的许可证:

Apache 2.0 - 不出众人所料,但这只是为了让用户知道你在用它做什么。

Ryan 接着解释了其他人如何从 Anivl 获得益处:

我总是会从别人的代码中受益很多。比如项目的最困难部分之一就是将 ant 的构建过程合在一起。为了完成这个任务,我实际上参考了 Google GWT 项目构建过程中的很多思想。因此即使你已经有了一个很不错的应用程序,我想你仍然可以从 Anvil 中学到很多。把所有的东西合起来使用需要很陡的学习曲线,而且我们过去的确遭遇过大量的技术挑战。

对于崭新的应用程序,我们强烈建议先浏览一下 Anvil,看看它是不是合适你。它可以提供一个简单的门户环境,你的 portlet 可以在其中显示并布局。它还有菜单系统让用户选择具体显示哪些 portlet。

InfoQ 接着请 Ryan 讨论一下 Flex 的各个模块,以及 Anvil 是如何使用他们的:

这是我们从 James 那里学到的最重要的技能之一,即如何使用各个模块。我们尝试着在 Anvil 中提供工具来处理模块加载和管理,来遵从所有这些最佳实践。将一个应用分成不同的模块可以带来很多好处,比如开发者可以同时分别工作在应用程序的不同部分上。在开发时你不需要将整个项目都加载到 Flex Builder 中去。Anvil 还提供了 ant 脚本来方便地编译 flex 应用程序。这跟模块结合在一起,在编译整个应用程序时提供另外一个好处,模块可以让编译呈线性进行,从而加速编译过程。

而对于运行时和部署,模块则有另外的好处。应用程序中的一小部分可以在应用启动时加载起来,从而为用户提供快速的响应。然后应用的其他部分就会在需要时从后台悄悄加载。这样每个单独的模块都很安全,甚至可以分发到不同的机器上以得到负载均衡或者故障转移。

最后,InfoQ 询问 Ryan 我们的读者还需要了解些什么:

现在我们一直在期待来自于社区的反馈。我们有很多如何采用 Anvil 的想法,但我们也希望 Anvil 能对更多的人有用。我在最近接受DrunkOnSoftware.com的视频采访时谈到了很多内容。

另外,我最近加入了 Gorilla Logic(www.gorillalogic.com),并期望能将那里工作合并进 Flex Monkey 项目 (http://code.google.com/p/flexmonkey) 中。我们一直在寻找办法使用 Flex Monkey 测试 Anvil 中的各个模块。

但更重要的是,我们非常欢迎来自于社区的最有帮助的想法。

谢谢你,Ryan。

开始使用 Anvil,请参考 Ryan 编写的指导,Anvil 的介绍

查看英文原文:Enterprise Flex with Anvil

Java语言 & 开发架构