使用Adobe Flex创建大型营销平台
http://www.infoq.com/cn/vendorcontent/show.action?vcr=819

在讨论营销平台之前,我们需要定义何为营销平台以及它们如何推动业务发展。假设您拥有一个国际品牌,它需要一个基于 Web 的软件解决方案,该方案使公司的营销团队能使用相应的母语吸引不同国家的客户,同时提供具有针对性的各种内容并开展区域活动。要成功推广这类品牌,您需要一款可以通过轻松缩放、快速部署实现产品营销并与现有外部服务紧密集成的解决方案。在早期规划阶段,必须记住不断开展新的营销活动,并且时刻念叨“一个品牌,一条讯息”。这是为了专注于推广一个强大的品牌形象,同时提供一致、引人注目的用户体验。

随着技术和用户的不断发展,营销平台的创建流程也日趋复杂。如今的营销战略包括之前与企业级的大型软件开发项目相关的主要方面和难题。是否能提供引人入胜的用户体验是成功营销产品品牌的关键所在。

在本文中,我将通过一个颇受欢迎的杜松子酒品牌 Bombay Sapphire* 的营销项目,说明使用 Flex 3 框架创建大型营销平台的一些常见战略。我们的团队为 Bombay Sapphire 开发了营销平台,我们从中学习到如何通过定义用户体验要求、如何通过实施战略开发灵活的架构以及如何利用 Flex 平台使这一项目取得成功。我将列出我们的团队构建这个营销平台所采用的方法,并讨论一些有趣的架构和开发技术,当您实施这类项目时,它们可以帮助您省时省钱。
要求

为了充分利用本文,您需要以下软件和文件:
Flex Builder 3

    * 试用(InfoQ中文站{dj2}高速下载)
    * 购买

Flash CS4 Professional

    * 试用
    * 购买

必备知识

{zh0}具备使用 Adobe Flex 和 Flash 技术的经验。开发富 Internet 应用程序 (RIA) 和营销活动的经验也会有所帮助。

本文以 Bombay Sapphire 平台实施为基础,旨在说明一个国际品牌通过推出全新平台可以达到的高度。

GUGGA 团队需要提供一种{dywe}的用户体验和影片般的外观,同时开发出一个可缩放的平台,用于展示不同的 Bombay Sapphire 市场中层出不穷的营销和促销活动。

当开发这类重要的交互式体验时,您首先会遇到的难题是分析客户并定义如何与他们实现{zj0}的交互,从而为品牌树立一个有利的印象。客户总是希望尽快看到项目的成果,如果能够在制作流程早期向他们展示平台的可运行版本(或至少平台的核心功能)将为您带来很大优势。

在早期规划阶段,我们不得不艰难地选出一些技术,将它们用于平台的展示层。我们对近期开发的项目进行了研究并发现 GUGGA 近年来在处理这类重要项目方面相当成功。GUGGA 创建了自定开放源 Flash 框架(称为 GUGGA Flash 框架*),它拥有必不可少的稳定性,同时简化了快速、灵活的应用程序开发。

在我们的评估过程中,Flex 成为优势最突出的一款解决方案。我们发现 Flex 框架可以提供所需的功能,并且在可伸缩性、可扩展性、并行开发以及社区支持要求方面解决了最苛刻的难题。

最重要的一项调查是确定 Flex 是否能够、适合实施功能丰富、复杂的动画,从而提供引人注目的交互式体验。启动 Bombay Sapphire 项目之前,我们只是了解使用 Flex 开发的商业应用程序。但通过执行一些初步测试,团队发现使用 Flex 框架进行开发以及设计 Flash 前端的潜在优势。我们每构建一个新的原型,我们对使用 Flex 开发这个项目的信心就会增强一些。

最终,我们都确信 Flex 是实施这个大型营销平台的{zj0}技术选择。
使用 FLEX 创建大型营销平台

功能强大、使用开放源代码、基于组件的 Flex 框架为我们提供了创建一个大型营销平台所需的一切。通过分析我们的品牌树立项目最关键的要求,我们确信它是{zj0}解决方案:

    * 提供一个引人注目的用户界面和用户体验
    * 简化了自定和本地化
    * 实现了应用程序设计的可扩展性和灵活性
    * 提供跨现有外部服务对数据的强大访问

在本文的以下部分中,我将进一步详述以上各项要求以及我们如何将它们结合到最终项目(请参阅图 1)。

需要通过满足项目要求的战略方法提供引人注目的用户体验

图 1.需要通过满足项目要求的战略方法提供引人注目的用户体验
效果与过渡

营销平台的用户体验是通过以引人注目的方式向用户展示的各种功能进行定义的。由于应用程序的性质,每个 UI 单元代表一个以数据驱动的复杂组件。对充满表达力、引人入胜的用户体验的需求十分巨大。

为了在那些复杂的组件中实施动画,我们需要一个功能强大、面向对象的抽象表示效果。借助这一抽象,我们可以驾驭设计模式的强大功能创建出强大而灵活的合成效果。使用 Flex 之前,我们实施了一个 Flash 框架*,旨在了解创作和管理异步操作的大致情况。

Flex 效果与我们之前用于开发引人入胜的 Web 项目所使用的 Flash 框架*十分相似。Flex 效果的另一个强大功能是将动画的描述与其执行分开。MXML 在其中扮演了主角。
MXML 语言

Flex MXML 语言为我们描述复杂的可视表示和效果提供了一种充满表达力的方式。这种语言的陈述性样式改善了上述过渡和组件的可读性与可维护性。此外,Flex Builder IDE 提供的设计时支持还提高了开发速度。
Flash 与 Flex 集成

Flash 和 Flex 可以通过密切配合为前端和后端应用程序开发提供一个完整的解决方案。例如,您可以使用 Flex Component Kit for Flash(Flex 3 SDK* 中现在提供)设置用户界面的不同状态。在本文的稍后部分,我将说明扩展和进一步利用 Flash 和 Flex 结合开发优势的两个有趣方法。
组件模型

为了实现引人入胜的用户界面和用户体验目标,我们需要一个强大而可靠的组件模型。尽管现有的 Flex 组件模型存在一些问题(其整体性质所致),我们必须使用包含的 CSS 支持、状态和数据感知,利用可用功能定义一个基于限制的布局。

扩展组件是整个开发人员社区面对的难题,目前投入问题解决的社区支持力量雄厚。
简化了自定和本地化

根据要求,我们需要寻找创新战略,使 Bombay Sapphire 营销部门能将讯息传播给遍布各地的广大观众。我们采用了强大的组件模型和数据模型组合,旨在为不同国家的客户显示各种语言的产品信息(请参阅图 2)。

强大的组件模型与数据模型提供了多语言功能

图 2.强大的组件模型与数据模型提供了多语言功能
组件模型

每个多市场、多语言营销平台都需要一种可以轻松实现内容本地化的技术。不仅需要使用不同语言提供内容,还必须能够为不同的市场提供各种功能。Flex 组件模型通过两个重要方面解决了多语言要求:字体管理与资源绑定。
数据模型

为了支持应用程序功能结构的灵活自定,您需要创建一个高度数据驱动型系统,而 Flex 框架已包含这一系统。
可扩展性与灵活性

营销平台必须能根据推出的新活动和产品提供不断增长和转型的能力。项目核心模块的开发能力简化了不断扩展和新增功能的流程(请参阅图 3)。

模块化开发提高了营销平台的灵活性

图 3.模块化开发提高了营销平台的灵活性
模块

在营销平台漫长而充满活力的生命中,开发团队需要借助各个独立部分(模块)集成和扩展功能以改变现有实施。为了设计出一个快速、简单的机制,将功能上独立的模块集成在一起,我们利用了 Flex 框架包含的模块化功能。
MXML

为了增强系统灵活性,必须管理和分离许多功能相依性。MXML 和 Flex 数据模型组合(其数据绑定方面)为开发和保持灵活性提供了必要的火力。
数据访问

所有富 Internet 应用程序依赖于它们在不同系统和 Web 服务之间成功收发数据的能力。数据必须可以根据需要成功传输并显示在营销平台中(请参阅图 4)。

简化服务数据访问是提供产品讯息的关键所在

图 4.简化服务数据访问是提供产品讯息的关键所在
服务基础结构

RIA 客户端需要一个发达、可靠的数据访问机制。这正是 Flex/服务基础结构的一个显著特点(请参阅图 5)。

主要功能要求与 Flex 框架中可用功能的对比

图 5.主要功能要求与 Flex 框架中可用功能的对比

要查看本部分描述的主题,请查看图 6 中左侧列出的项并了解主要功能要求和关注问题,然后将它们与 Flex 框架中的可用功能(显示在右侧)对比,您就会明白为何我们确信 Flex 是开发这一营销平台的{zj0}解决方案。

还应当考虑到加入帮助颇大的 Flex 社区的重要优势,当您在项目开发的关键阶段遇到难题时,始终可以通过它解决问题。
成功营销平台的构建战略

每个大型软件项目都需要一个深思熟虑的方法。以下我列出了一些值得一提的关键方面-尤其对于开发营销平台而言。这是一些常见且非常实用的战略:

    * 努力创建并不断改进一个整体系统模型可以作为所有集成功能和丰富内容的逻辑框架。
    * 完整构建每个功能可以帮助您掌握客户关系,并在开发流程早期更轻松地向客户展示用户体验工作流程。
    * 按照计划对改变做出响应为您和您的客户提供了连续不断的灵活性。随时满足客户日新月异的需求,并且最终目标始终铭记于心。
    * 管理改变流使团队中的每个成员都能开发出尽可能xx的产品。不要害怕改变,或将它们视为障碍。改变没有坏处,何不试着拥抱它,驾驭它。


构建系统架构

所有营销平台都可以从一个井井有条的系统架构中受益,这种架构通过遵循常见的惯例加快数据传输并简化维护(请参阅图 6)。

系统的不同层被分隔开,以一种逻辑方式相互交互

图 6.系统的不同层被分隔开,以一种逻辑方式相互交互

作为开发人员,我们必须确保在客户、通信、业务和数据层清晰地分隔出多层架构。您应当将注意力集中在系统前端,因为这里会出现最复杂的交互(请参阅图 7)。

首先定义前端,并决定如何在它与用户界面之间传递数据

图 7.首先定义前端,并决定如何在它与用户界面之间传递数据

基本而言,前端核心设计为许多相互嵌套的 MVCS (Model-View-Controller-Service) 结构。

    * 表示子系统跨许多组件并且作为不同模块的码头,它决定了平台。
    * 单独的数据模型子系统封装了应用程序数据和状态。
    * 服务子系统打开前端,与业务层进行通信。
    * 控制子系统分布到许多专用控制器中,并为整个应用程序赋予生命力。

模块是核心表示的自然延伸。它们负责显示特定内容和功能。平台上可以部署无限量的模块,同时将核心保持原样。

每个不同的粒度级别上都可以找到 MVC (Model-View-Controller) 实例。例如,前端应用程序被视为{dj0} MVC。任何特殊模块或宏组件是该模式的又一种实施。要查看这类示例,可考虑构成 Bombay Sapphire* Web 应用程序导航系统的宏组件。它包含一个极其复杂的视图,该视图是 Papervision 3D* 和 Flex 组件的组合。它还包含基于状态的控制逻辑和一个复杂模型。MVC 被视为用于分离宏组件、模块和应用程序本身中的问题的主要设计方法。

MXML 语言和数据绑定的强大功能确保了该设计的灵活性,它们可以在所有级别轻松创建控制容器的简单转换。Flash 事件模型为我们在不同组件之间通信提供了一个功能强大的松耦合机制。这些原则和技术应用于每个子系统中以及所有子系统之间。

在下一部分中,我将描述 Bombay Sapphire 营销平台的几个有趣的实施细节。


扩展应用程序引导

当您构建一个 Web 应用程序时,要检查的一个最重要的方面是最初加载体验。在此次案例研究中,我们开发的营销平台旨在推广世界知名的 Bombay Sapphire 品牌。所有站点访问者必须达到法定饮酒年龄 (LDA) 才能进入该站点。{dy}次加载网页时,将要求用户选择所在国家并输入出生日期。我们的要求包括在进入该网站时增加一个年龄验证步骤(请参阅图 8)。

创建一个描绘用户进入网站过程的流程图在开发底层逻辑和用户界面之前会有所帮助

图 8.创建一个描绘用户进入网站过程的流程图在开发底层逻辑和用户界面之前会有所帮助

其他两个主要要求是确保站点加载迅速,并且可以在 LDA 状态与其余体验之间提供顺畅过渡。为了实现顺畅过渡,我们在 Flex 应用程序中开发了一个 LDA 部分。我们意识到显示 LDA 验证界面之前,不能强迫用户加载整个应用程序。为了创造一种{zj0}体验,我们将显示 LDA 之前的应用程序加载时间缩至最短。用户完成 LDA 表单后,将显示一个最小的 LDA 后加载屏幕,然后显示实际应用程序(请参阅图 9)。

查看应用程序的不同部分应如何加载

图 9.查看应用程序的不同部分应如何加载

为了实现目标,我们决定必须在最初加载阶段中加载 LDA 验证表单。当用户在 LDA 表单中输入数据时,后台正在加载 Flex 框架和应用程序逻辑。如果用户提交 LDA 表单后,后台加载过程仍在运行,则加载应用程序之前会向用户显示一个后加载屏幕(请参阅图 10)。

置入 Flash 模块

图 10.置入 Flash 模块

为了在我们的项目中实施这一点,我们使用了一个置入 Flex 应用程序预加载器屏幕的 Flash 模块。通过使用 Flash 模块,我们发现不使用 Flex 框架也可以创建一个文件尺寸最小的交互式 LDA 验证表单。

置入通过创建一个加载 Flash 模块的自定 Flex 预加载器屏幕完成。当传递 LDA 验证表单数据时,一个自定 Flex 预加载器屏幕调度已完成的事件,该事件触发应用程序打开(请参阅图 11)。

以下是这一实施中的一些有趣细节:

    * 我们在 Flash 模块实施中使用了 fa?ade 设计模式。这样,我们可以将 LDA 验证表单从 Flex 应用程序中分离出来,从而提高了这一解决方案的灵活性。我们还发现通过为这种 fa?ade 使用界面,可以xx已编译类复制的相关问题。
    * System Manager 将预加载器的{dy}个 FlexEvent.INIT_PROGRESS 事件作为转到 SWF 文件第二帧的条件。我们意识到如果需要阻止 System Manager 转到第二帧,只需抑制该事件,稍后重新调度它。虽然抑制框架事件并非一个好办法,但是我们发现在这一特殊情况下,这是一个十分简便的解决方法。


管理复杂效果和过渡

在本部分中,我将讨论构建营销平台时的另一个主要考虑事项:可视过渡。为了更清楚一些,我将用过渡一词描述从一个图形状态到另一个图形状态的动画可视变化的常见动画概念-这超越了它特定的 Flex 含义。

创建自定效果和过渡是 Flex 中的常见做法。但是,我们发现有关复杂过渡创建过程的文档或知识共享并不多。复杂过渡可能依赖于条件逻辑或异步操作。它们还可能包含运行时创建的效果或驻留在外部模块中的效果。下例说明了为何我们认为有必要将开发时间用于编写和管理复杂过渡(请参阅图 11)。

图 11. 复杂过渡使我们能在 Bombay Sapphire 应用程序中同时显示和管理多个动画

上例说明了加载 Flex 模块时显示的动画。主过渡序列等待外部模块加载并初始化,然后播放其显示效果。主过渡还结合了许多其他效果,其中一部分在其他 MXML 文档中声明。

效果的结构和执行是构建引人入胜、可扩展的可视表示的一个重要方面。在许多情况下,效果对应用程序的查看或控制增加了一定的视觉影响。另一种情况恰恰相反,效果实际上需要依赖查看或控制属性才能执行,虽然不太常见,却同样重要。下图说明了这类复杂过渡的流程(请参阅图 12)。

该图说明这类复杂过渡的流程

图 12.该图说明这类复杂过渡的流程

在上例中,我们创建了两个并行节点。{dy}个节点包含一个标准淡化效果,随后是淡化或暂停效果-取决于特定条件。第二个节点也包含一个标准淡化效果,但在确保节点完成之前必须等待一个特定事件发生。在两个节点完成后,将显示另一个效果(在不同的 MXML 文档中声明)。由于复杂性更高,无法得知具体效果,因为它是在不同的模块中声明的,而这一模块是在整个过渡的执行过程中的某个时刻加载的。

当您遇到必须处理这类复杂过渡的情况时,可以围绕效果基础结构创建一些抽象,在这些复杂条件中进行导航。
高级别工厂

{dy}组效果在 Flex 效果工厂*上实施。我们创建了简单的高级别工厂,它们可以将其他工厂作为参数并在创建实际实例时使用它们。

以下是代码示例:

<effect:Reference value="{detail.module.showEffect}" />

为引用效果传递一个用于创建实例的效果工厂 (detail.module.showEffect)。

<effect:ConditionalEffect ifCondition="{panels.visible}">
<effect:thenEffect>
  <mx:Fade duration="1500" />
</effect:thenEffect>
<effect:elseEffect>
  <mx:Pause duration="50" />
</effect:elseEffect>
</effect:ConditionalEffect>

条件效果作为变量传递两个效果工厂;根据特定条件 (panels.visible),它将使用其中一个。
“实时”效果

在此项目中,我们发现需要在播放实例之前即时创建特定效果实例。常见的情况是需要效果工厂变量的“缓慢”评估。在我们的示例中,无法再创建整个过渡时评估“value”变量,因为包含我们的“模块效果”的模块尚未加载。
以下是代码示例:

<effects:LazyEffect>
<effect:Reference value="{detail.module.showEffect}" />
</effects:LazyEffect>

这种情况下,我们创建了一个效果,它只需通过支持“缓慢”创建其实例来包裹其他效果。开始包裹实例时,将创建实际效果实例。
“事件阻止器”效果

我们还发现在某些情况下,需要在特定“位置”阻止过渡执行,直至发生特定事件。要做到这一点,我们只需创建一个效果,它会监听该事件,并且仅当触发该事件时才完成:

<effects:WaitForEvent target="{detail}" eventName="ready" />

以下是所产生过渡的代码:

<mx:Sequence>
<mx:Parallel>

<mx:Sequence>
 
<mx:Fade />
 
<effect:ConditionalEffect ifCondition="{panels.visible}">
  
<effect:thenEffect>
   
<mx:Fade duration="1500" />
  
</effect:thenEffect>
  
<effect:elseEffect>
   
<mx:Pause duration="50" />
  
</effect:elseEffect>
 
</effect:ConditionalEffect>

</mx:Sequence>

<mx:Sequence>
 
<mx:Fade />
 
<effects:WaitForEvent target="{detail}" eventName="ready" />

</mx:Sequence>
</mx:Parallel>
<effects:LazyEffect>

<effect:Reference value="{detail.module.showEffect}" />
</effects:LazyEffect>
</mx:Sequence>

如您所见,这种方法xx是声明性的。它使用语义方法描述复杂过渡。这种战略提高了这类过渡的灵活性和可维护性。您可以轻松更改过渡的结构,并将它细分为多个独立、可重用的子过渡。

当您实施这些自定效果抽象时,请考虑以下指导方针:

根据需要,为查看状态过渡机制提供适当的实施:捕获起始值/播放

根据需要,为高级播放控制提供适当的实施:播放/暂停/继续/结束


开发模块化应用程序

在本文的{zh1}部分,我将说明开发模块化应用程序的重要性。模块化是创建灵活的可扩展应用程序的关键所在。Flex 框架为创建强健的模块提供了一个十分强大的基础结构。让我们一起来看下两个不同示例(请参阅图 13)。

Bombay Sapphire 界面包含一个用于提交特定酒吧相关信息的表单

图 13.Bombay Sapphire 界面包含一个用于提交特定酒吧相关信息的表单

在{dy}个示例中,我们使用一个典型 Flex 模块的实例,它利用现成的 Flex 组件。您可以看到平铺列表组件的实例、输入控制、过滤器和一些高级验证。

第二个示例xx在 Flash 中构建。其中结合了支持 Flash 模块,它们使 Flash 开发人员能为设计增色并采用更具创意的效果(请参阅图 14)。

合作部分全部采用 Flash 界面来显示品牌相关信息

图 14.合作部分全部采用 Flash 界面来显示品牌相关信息
模块架构

记住,模块应当始终与平台高度分离。模块通常实施 MVCS 模式。考虑它们的架构时最重要的一点是模块与平台的通信。应当使用界面和事件实现这一通信(请参阅图 15)。

模块通常实施 MVCS 模式,并使用界面和事件与平台通信。

图 15. 模块通常实施 MVCS 模式,并使用界面和事件与平台通信。

界面提供了初始化、配置和视觉效果所需的方法和属性。必填字段包含在一个界面中。另一个界面提供扩展功能。将逻辑分为多个界面的主要目的是减少创建模块时不必要的复杂性。

以 Flash 事件模型为后盾,模块能以高度分离的方式与平台交互。这种通过事件实施的隐式调用技术,使模块能执行导航请求或使用应用程序级服务:

    * 模块可以通过事件对象传递变量。
    * 模块还可以通过事件对象“接收响应”。这是一种更不寻常的事件使用方法,但在某些情况下十分实用。例如,模块调度一个提取导航请求的事件。如果平台需要拒绝这个导航请求,其事件处理程序只需在事件对象中设置一个“ 已拒绝”标记(通过设置该自定事件的布尔属性)。这样,模块可以检查事件对象的“已拒绝”属性,使它能评估请求被批准还是拒绝。这种技术类似于 Flash 事件的“阻止默认”机制。

解析一个简单 FLASH 模块

值得解析的{zh1}一项是一个简单 Flash 模块的实施情况。

简单 Flash 模块有几项指标:

    * 不需要复杂的基础结构。
    * Flash 模块通过 Flash 创作环境构建而成。
    * Flash 模块包含基于时间轴的动画或交互

您可以将一个简单 Flash 模块想象成一个应用程序,它通过界面与营销平台通信(请参阅图 16)。

通过界面连接到平台的简单 Flash 模块

图 16. 通过界面连接到平台的简单 Flash 模块

简单 Flash 模块可以是xx由创作团队的 Flash 设计人员创建的引人注目的品牌动画。许多情况下,比较倾向于将简单 Flash 模块集成到营销平台中而无需额外开发。

可以通过创建一个模板 FLA 文件做到这一点,Flash 设计人员使用它生成加载到应用程序中的 SWF 文件。您可以适当配置这个模板 FLA 文件,使 Flash 设计人员能发布 FLA 并创建出相应的 Flex 模块。

可以通过以下两个步骤配置 Flash 模板:

   1.

      创建 IFlexModuleFactory 接口的简单自定实施。

      public class FlashModuleFactory extends MovieClip
       implements IFlexModuleFactory
      {
       public function FlashModuleFactory() : void
       {
        super();
        addFrameScript(1, secondFrameHandler);
       }
       private function secondFrameHandler() : void
       {
        stop();
        dispatchEvent(new Event("ready"));
       }
       public function create(... parameters):Object { ... }
       public function info():Object { ... }
       ...
      }

      这个范例实施会告知 Flex 框架模块已完成。它还负责创建包含该模块的类(元件)。
   2. 创建一个包含两个帧的空 FLA 文件,并将 FlashModuleFactory 设置为文档类。

通过使用这个模板 FLA 文件,Flash 设计人员无需任何复杂的开发工作即可扩展平台。

当然,需要考虑到一些十分重要的实施问题:

    * 这种方法不提供任何依赖性管理或字体管理......并且不会利用 Flex 框架。这意味着您应当使用自己的代码和工具明确地处理这些需求。
    * 尤其要注意内存管理。如果您要使用某些高级音频、视频或是基于 ActionScript 的复杂自定组件,尤其要注意内存管理问题,特别是打开和关闭模块时。
    * 扩展这种方法时请注意。实施这个模板生成的 SWF 时的主要目的是创建简单模块,它们可以充分利用 Flash 创作环境提供的时间轴。这种战略主要适用于创建基于时间轴的复杂动画。如果要扩展这一功能,请谨慎操作、及早并定期测试。

如果您开发出了自己的 Flash 框架,您可能已经考虑到上述部分问题。
后续工作

在 Bombay Sapphire 项目的开发过程中,我们发现 Flex SDK 是创建大型营销平台的{zj0}选择。Flex 是一个功能强大、使用开放源代码、基于组件的框架,它为创建营销平台所需的开发工具包奠定了扎实的基础。Gugga 目前正在开发这种工具包的雏形。Gugga 工具包将包含不同实用型开发技术的实施;我在本文中已经说明了许多此类技术。

除了 Flex SDK 目前的有益特征,Flex 的下一版本(代码为“Gumbo”)将xx大多数日常实施中遇到的障碍,令人憧憬。

Adobe Flash Catalyst* 是一个令人兴奋的全新 IDE,它支持从前到后的开发概念。它即将推出的发行版允许 Flash 设计人员在开发的同时进行应用程序设计。
其他资源

本文基于 Adobe MAX 2008 Milan* 上的“使用 Adobe Flex 创建营销平台”演示。要进一步了解如何使用 Flex 创建营销平台,请访问以下在线资源:

    * 功能驱动型开发*
    * 从前到后构建 RIA*
    * 灵活的软件开发*
    * 更改流程*
    * Flex 实用模式* (PPT, 2.4 MB)
    * 控制转换概述* (PDF, 166K)
    * Boston Flash 平台用户组*
    * Adobe 开放源代码*
    * xx自定的预加载器*
    * 同时使用 Flash 和 Flex* (PDF, 2.4 MB)
    * Papervision 中的复杂模型解决方案*
    * Papervision 3D*

致谢

Bombay Sapphire 平台的设计和用户体验xx归功于 Shift Global LLC* 的优秀工作和领导。
关于作者

Branimir Angelov 是 GUGGA* 的一名技术总监。他在创建面向营销、企业级的创新 RIA 平台方面拥有丰富经验,他最初使用 Flash 继而使用 Flex 2 和 Flex 3。Branimir 是 GUGGAFF* 的创始人之一,这是一个用于创建基于 Flash 的大型 RIA 的开放源代码 Flash 框架。他是索菲亚{dy}批 Flex 大学级课程的讲师,以母语发行的{dy}本 .Net 书籍的合著者,也是保加利亚不断壮大的 Flex 社区的{ldz}和动力源泉。
郑重声明:资讯 【使用Adobe Flex创建大型营销平台】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——