写点什么

Prana Framework 力推 ActionScript 3 应用开发

  • 2008-11-05
  • 本文字数:2817 字

    阅读完需:约 9 分钟

Prana 是一个面向 Adobe Flex 及 ActionScript 3 的控制反转(Inversion of Control,即IoC)应用框架。InfoQ 最近采访了Prana Framework 的创建者Christophe Herreman 和Damir Murat 以深入了解该框架的使用。

InfoQ:您能否向 InfoQ 的读者说明一下当初为何在其他控制反转应用框架已经存在的前提下还要开发 Prana 呢?

Herreman:Prana 诞生于我们开始重写之前用 ActionScript 2 和 Flash 开发的一个在线学习平台之际。我们使用的一个库是来自于 as2lib 的 IoC 容器,由于之前 IoC 对我们的工作提供了巨大的帮助,因此我们想在自己的这个新平台上也添加同样的功能。那时还没有 ActionScript 3 的 IoC 容器,所以我打算自己开发一个。

我以一个自己的实现(基于 Spring XML 方言)开始,但很快我就决定尽可能地以 Spring 提供的代码作为基础。这样做更容易实现某些特性,因为可以参考 Spring 的源码;熟悉 Spring 的开发者使用 Prana 时会很容易上手,当然我也借此机会更深入地学习 Spring 的内核。

InfoQ:您认为 Prana framework 最突出的特点是什么?

Herreman:它是一个通用、可扩展、功能强大的 IoC 容器。如果你了解 Spring IoC 容器,那么你就会清楚 Prana 能做些什么。

它有一个很棒的特性:你可以向其 XML 解析器中增加自定义的预处理器。预处理器用来转换已加载但尚未解析的 XML。接下来,你可以增加新的元素和属性以方便地描述自定义对象,同时还可以让自定义的预处理器将元素转化为 Prana 解析器可以理解的形式。

除了 IoC 容器,Prana 还有一个构建于 describeType() 之上的 Reflection API。这样你就可以在运行时获得对象的信息,比如对象包含的属性和方法以及实现的接口等等。接下来,我们还为领域对象创建了一些基础类(这是从 Eric Evans 的 Domain-Driven Design 一书中得到的灵感)。这些基础类具有比较和克隆对象等逻辑。Prana 还包含几个有用的帮助类。

Murat:Prana 还提供了一些工具,这些工具可用来快速建立基于 Prana 的项目。其中一个主要特性就是动态更新 Flex 编译器的配置信息以包含编译好的 swf 中的类,而这些类是无法通过代码访问的。这在 IoC 系统中很常见,因为 IoC 鼓励面向接口(而不是类)编程。我们的工具与 Eclipse/Flex Builder 紧密集成,同时他们可以检测到 Prana 的配置信息何时发生了变化,如果需要的话,他们就会解析 Prana 的配置并相应地更新 flex 编译器设置。当程序员必须显式声明无法通过代码访问的类以将其包含在最终编译好的 swf 中时,这种方式就无需再使用典型的 flex“模式”了。我们的工具会自动完成这些事情。

还有其他一些特性,如预定义的项目布局、定义好的 Ant target,对 subversion 的支持等等。所有这些特性都是可配置的,并可通过几个步骤轻松搞定。开发者可以查看 prana-tools 项目(从 svn 或是分发包中都可以得到)以了解感兴趣的信息。

InfoQ: Prana 集成了 Cairngorm 和 PureMVC。您能否说明一下 Prana 为什么要与这两个框架集成,并且是如何实现集成的?

Herreman:我们为 Cairngorm 和 PureMVC 提供了一套扩展。因为我们使用了 IoC,所以我们还想将该原理应用到我们正在使用的框架上,同时我们想用依赖注入(Dependency Injection,即 DI)对应用的不同部分进行包装。

我们为 Cairngorm 提供了一个可配置在 IoC 容器中的服务定位器。你可以在外部定义远程对象、_channelsets、consumers_ 等,并可以改变他们而无需重新编译应用。通过这种方式,你也无需编译 services-config.xml 文件并可以轻松地将其部署到不同的地方。它还使测试变得更简单。典型的例子就是当你从开发机器迁移到测试或是产品服务器上时,你得改变端点(endpoints)。Prana 使这一切变得简单,你无需重新构建应用。

我们提供的 _frontcontroller_ 是 Cairngorm _frontcontroller_ 的一个子类,它接收定制的命令工厂。通过这种方式,你可以控制命令创建的方式,一旦命令创建好后,你就可以将额外的属性注入到命令中。除此以外,我们还支持链式的事件 / 命令,这样你就无需显式地从另一个命令中调用命令了。

Murat:与 PureMVC 的集成最初只是一种实验性的尝试,用来将 IoC 带到 PureMVC 应用中。后来发现这是可行的,于是我们就将这项工作公开了。

对于 PureMVC 用户来说,主要的好处是当遇到依赖时可以使用依赖注入。同时这也是最大的缺点,因为 DI 的使用不可避免地会改变一些原始的 PureMVC 使用习惯,而这些习惯是基于服务定位器模式的。然而我们相信 DI 对任何应用都是很有帮助的,PureMVC 也不例外。为了减轻移植到 DI 的代价,我们尽可能简化 Prana 的 PureMVC 集成。例如,PureMVC 开发者可以选择一个 DI 的应用范围。Prana 只能用来管理非 PureMVC 对象,或者说它只能用来管理部分 PureMVC 类,当然它可以管理应用中的 PureMVC 对象和非 PureMVC 对象。

InfoQ:能不能推荐一下使用 Prana 的最佳方式(或者是应用类型)?

Herreman:如果你需要在应用中保持一定程度的灵活性以便其可以运行在不同的上下文中,或者是你拥有大量的配置,想要集中管理他们,那么我极力推荐使用 Prana。因为它基于 Spring,很多开发者已经熟悉了其概念和 XML 方言。

就我们的情况来说,我们已经创建了一个在线学习平台,用户可以定制其自己的需求。因为我们自己管理该平台,所以需要有一种机制以允许所有这些定制。如果没有 IoC,我们就不得不对每个定制编译不同的软件版本,或者是我们必须编写一个基于 XML 或者是数据库的客户配置系统,而对其的维护绝对是一个噩梦。与此相反,我们可以让每种定制都有一个应用上下文,当应用加载时就去装载该上下文,这取决于登录的用户。更酷的是我们可以从 ASP 页面(需要从数据库中读取配置)中即时生成应用上下文。

InfoQ:Prana 的长期计划是什么?

Herreman:最重要的事情就是 IoC 容器,我们期望 1.0 版会有一个稳定的容器。目前来看,容器本身很不错,但我们还可以改进一些东西,增加更多的 Spring 特性,如 parent beans 及自动装配等。我们还需要编写一些文档。

我们一直在与开发团队探讨将扩展(Cairngorm、PureMVC 等)从主代码库中移除,然后将其作为独立的扩展库发布。这么做将有利于发布管理。

我还准备开发一个 AOP(Aspect-Oriented Programming,面向方面的编程)框架,但遇到了一些麻烦,这些麻烦是由 ActionScript 3 的一些限制导致的。AOP 背后的主要思想是基于动态代理机制创建新的对象类型,该对象会在运行时实现一些接口。问题在于这在 ActionScript 3 中是不可能的。我们已经在 Adobe JIRA 上发布了这个话题,如果有人愿意与我们分享一些见解的话我将感激不尽。该话题位于: http://bugs.adobe.com/jira/browse/ASC-3136

至于其他方面,我们还没有制订严格的路线图。当我们有新想法时就会引入一些新特性和进行一些改进,我们一直在倾听来自其他开发者的建议,同时还期待有更多的人能加入到我们的团队中。

查看英文原文: Prana Framework Helps on ActionScript 3 Application Development

2008-11-05 15:59951
用户头像

发布了 88 篇内容, 共 268.3 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

MySQL explain 中的 rows 究竟是如何计算的?

架构精进之路

MySQL

libuv 异步模型之设计概览

Huayra

libuv 异步模型

PHP之闭包函数

书旅

面向对象 闭包 函数

分布式链路追踪Skywalking 存储模型设计

胡弦(关注公众号架构随笔录)

分布式 Skywalking 高性能 分布链路追踪

英特尔首席架构师Raja:一个“百亿亿次级计算能力惠及每个人”的时代正在到来

最新动态

一瓶可乐的自动售货机指令“旅程”

华为云开发者联盟

物联网 嵌入式 华为云 数据传输 无线通信

终于知道Kafka为什么这么快了!

大头星

kafka 消息队列

SpringBoot系列(六):SpringBoot 数据库操作(集成MyBatis)

xcbeyond

Java 微服务 mybatis springboot

Maven的爱恨情仇

xcbeyond

Java maven

troubleshoot之:分析OutOfMemoryError异常

程序那些事

Java JVM 异常 JIT

Phalcon注解学习

Geek_4z9ami

php phalcon

年近而立,Java何去何从?

华为云开发者联盟

Java 开源 程序员 编程语言 Bugayenko Yegor

智“营”时代,众盟科技荣膺“2020毕马威中国领先消费科技TOP50企业榜单”

人称T客

面试造火箭,看下这些大厂原题

前端有的玩

Java 面试 大前端

分苹果

书旅

算法 LeetCode

面试官:说下对cookie,session,Token的理解

Java小咖秀

Java 面试

MySQL备份脚本,应该这么写

Simon

MySQL

网站改版神秘公式,教你躲避改版陷阱

北柯

创业 网站 网站搭建 网站改版

JavaScript中的正则表达式详解

华为云开发者联盟

Java 正则表达式 程序员 字符串 语法

实践总结:在 Java 中调用 Go 代码

写代码的西瓜

免费DDoS攻击测试工具大合集

陈磊@Criss

AI能写浙江高考满分作文了!在线满分作文生成器,一键圆你满分梦

程序员生活志

AI

如何从红蓝墨水中分离出红墨水?回声消除算法介绍

拍乐云Pano

音视频 WebRTC 回声消除 3A算法 音频技术

MySQL中timestamp和datetime,你用的对么?

xcbeyond

MySQL 数据库 后端

如何正确认识区块链?

CECBC

区块链价值 区块链应用

腾讯人均月薪7.5w,我这是又被平均了?

程序员生活志

腾讯 职场 薪资

统一软件开发过程(RUP)的概念和方法

雯雯写代码

应用研发平台特惠专场,助力企业加速数智化发展

移动研发平台EMAS

守护进程

书旅

php 进程 守护进程

SpringBoot系列(五):SpringBoot 日志配置(logback)

xcbeyond

Java 微服务 springboot logback

如何写出完美的接口:接口规范定义、接口管理工具推荐

xcbeyond

Java 架构 接口规范

Prana Framework力推ActionScript 3应用开发_Java_Moxie Zhang_InfoQ精选文章