Online Book Reader

Home Category

Beautiful RIA [12]

By Root 409 0
商品页和支持

高效率的超大规模 Flex开发

页(HomeView.mxml, ProductsView.mxml, SupportView..mxml)都放入根包中。这个过程和把 所有根目录中的视图包放入一个 Java包中比较类似。

开发人员在创建第一个应用程序时常常会碰到一个问题:那就是如何用视图来捆绑住应用程 序模型。一个通用的反模式是在类之间传递模型或者在调用视图前设置模型。反模式的一个 例子——也来自于 Flex商店——即在主应用程序中将目录传递进 ProductsView。

这段代码在小的例子中可以正常工作,但是随着应用程序逐渐变大,它会带来一些问题,如 层之间的紧耦合,以及很难开发和测试。另外一个问题是当同样的数据需要在应用程序不同 部分显示时,这些数据需要分开地传递给每一个组件。首先,这看起来似乎不是一个问题, 但是试想下如果尝试模拟每一个传递和使用数据的实例,结果会怎样。

客户端架构:推荐模式

多年来众多的 Flex架构和框架已经被开发出来。最有前景的一种方法使用了一个像 Swiz一 样的轻量级依赖注入框架,并用它来划分项目结构。你可以在 Swiz中定义类似于 Spring中 的应用程序 bean,并将它们注入到应用程序中的不同部分。一个典型的应用程序框架会包 含一个中心类,这个类会定义服务怎样组合在一起——例如,ClientBeans.mxml 类为应用程 序声明了通用的模型和控制器:

然后 View类连接上控制器:

[Autowire(bean="storeModel")]

[Bindable]

public var storeModel: StoreModel;

对于控制器和其他通用组件,你也可以这么做。用这种方式组织项目结构有一些优势。一个 优势在于它可以让模拟服务轻松地植入控制器,以促进开发和测试。另外一个优势在于它能 够除去和客户端架构不同层之间的耦合性。

一个精心设计的主视图状态有助于实现前面提到的可用性和可测试性目标。视图栈的思想是 让应用程序中的任何视图可以通过单个 URL进行访问。除此之外,视图栈的参数需用通过 通用控制器传入,这个通用控制器能够让你在应用程序中各个地方使用通用的 URL和必要 的参数来访问期望的视图。

高效率的超大规模 Flex开发

一个 Flex架构示例:重构 View Store

作为架构的一个示例,让我们先看看怎样将

http://www.adobe.com/devnet/flex/samples/flex_store/上的 Flex Sotre的例子进行重构。

首先,将主源代码移动到子目录中。在这个例子中,我将所有的资源,产品视图,以及样例 目录移动到了 flexstore/src/flex中并将其作为源代码主目录。我还把所有的 MXML和 CSS文 件移动到了这个目录中。

接下去,将三个主视图类移动到视图文件夹中。在 src/flex目录下创建一个 com/anvilflex/view 目录。将 HomeView.mxml,ProductsView.mxml以及 SupportView.mxml文件放入到这个目录 中。为此,你必须对 flexstore.mxml做出如下改动:

 在标签中加入 xmlns:view="com.anvilflex.view.*"。

 将视图变为使用标签(因此将变成)。

将 Product.as类移动到分开的域文件夹中——com/anvilflex/view。为此,你必须修复 Product 类的 import语句,并删除 Product单词的最后一个字母。接下去,按住 Ctrl空格键来使用 自动完成功能,它同样也可以为 Product类加入正确的 import语句。

最后,引入 ProductControl来管理产品页面和结算间的过渡。

使用 Spring BlazeDS集成简化 Java开发

Spring BlazeDS 集成项目大大简化了与客户端交互的 Java服务端代码开发。在最新发布的项 目中,团队成员可以实现核心的配置文件,如 web.xml以及 Flex服务配置文件。接下去, 团队人员需要简单地了解一下如何在他们的类中增添适当的标注来将它们作为服务展现给 BlazeDS。举个简单的例子,你可以将 Product服务类展现为一个远程服务:

@Service("productService")

@RemotingDestination(channels={"my-amf"})

public class ProductDAO {

@Autowired

public ProductDAO() {

//... initialize the ProductDao class }

@RemotingInclude

高效率的超大规模 Flex开发

public Product findProductName(int id) { Product product = database.findProduct(id); return product.name;

}

}

在这个例子中,我将 ProductDAO类声明为了远程服务,它可以通过使用 productService进 行调用。单个方法可以使用 @RemotingInclude将其展现为远程方法。其实这些方法都会作 为远程服务展示给 BlazeDS,其中 Flex可以通过远程对象调用远程服务。

与图形设计团队一起工作

刚开始的 Flex项目中一个常见的问题是,确保图形设计团队了解 Flex中可以做什么。Flex 为很多有趣的设计提供了可能性:图形设计团队需要了解 Flex中可以做什么,以及 Flex怎 样来表示一个基础设计转变。

通常情况下,碰到的问题是,图形设计团队用一些像 Adobe Photoshop的工具创建了一个模 拟。尽管设计看起来非常好,但是它与工作中的应用程序还相距甚远。整个设计将不得不削 减并且颜色和字体都得与应用程序的 CSS相匹配。根据设计的复杂度,自定义的 Flex组件也 需要被创建。这些组件可能是需要自定义皮肤的按钮,也可能是定义了一系列新功能集合的 组件。困难之处在于设计和实现之间变得极其耗时,设计人员需要搞清楚什么是可能的并从 设计中实现这些变化。每一次迭代都会变得更加复杂。

幸运地是, Adobe已经引入了一个新的工具来改进这个过程,这个工具就是 Flash Catalyst。 它可以让类似 Photoshop这样工具产生的艺术品能够轻松地转变为可用的原型。它还可以创 建一个原型的 GUI并最终应用到应用程序中。通过使用此工具,设计人员可以更快地遍历他 们的设计,从而使该组织能更有效地调整设计,以满足其要求。

单元及功能测试

Flex 开发中有两种主要的方法来测试一个应用程序。第一个是使用 funit或者 fluint的功能测 试。这个方法可以进行服务以及控制器的测试。第二个方法是功能测试,它可以测试与 GUI 间的实际交互。功能测试可以使用像 Mercury一样的商业工具,或者像 FlexMoneky一样的 开源工具。

两种类型测试的关键是要在松耦合层创建可以独立测试的代码。例如可以通过将默认捆绑改 变为使用模拟服务,来轻松地修改服务。

高效率的超大规模 Flex开发

总结

使用 Spring BlazeDS集成的 Flex为大规模企业应用程序提供了一系列卓越的技术。开发人员 的挑战在于设计模块化,易调试,可扩展的架构。这里的可扩展,我指的不仅仅是软件,还 包括开发过程。解决这些挑战可以帮助项目成功,并为组织带来一个更高的投资回报率。

http://www.infoq.com/cn/articles/flex-development-ryan-knight原文链接:

:相关内容

 从标签时代到富客户端:从Web 1.0到Flex

 FlexMonkey将单元测试引入Flex用户界面开发

 Java程序员ActionScript 3入门

 Flex与JSON及XML的互操作  构建Flex应用的 10大误区

Spring BlazeDS Integration简介与入门

作者 Ryan Knight译者 张龙

Spring BlazeDS Integration 是 2008年年底 Adobe与 Spring共同宣布联合开发一个新项目。 其目标就是让开发者可以利用 Spring开发模型通过 Adobe Flex、BlazeDS、Spring以及 Java 技术创建 RIA。其优势在于将 Spring的易用性与 Flex、BlazeDS以及 Java整合起来以共同 创建应用。本文作者根据这些改变介绍了本项目与以往传统方式的优越之处。

去年底 Adobe与 Spring共同宣布将联合开发一个新项目:Spring BlazeDS Integration。其目标 是:开发者可以利用 Spring开发模型通过 Adobe Flex、BlazeDS、Spring以及 Java技术创建 RIA。这样我们就可以通过 BlazeDS公开 Spring管理的服务而无需额外的配置文 件。其优势 在于将 Spring的易用性与 Flex、BlazeDS以及 Java整合起来以共同创建应用。

我将在本文中介绍 Spring BlazeDS Integration项

Return Main Page Previous Page Next Page

®Online Book Reader