2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:59993
用户头像

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

关注

评论

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

细说包管理器yarn和npm

devpoint

npm YARN Node 10月月更

老式月饼是一块坚硬的乡愁

石君

自我成长 乡愁

上次写作还是在上次之——WebRTC(一)

Zoomdaa

WebRTC

004云原生之服务化架构

穿过生命散发芬芳

云原生 10月月更

003云原生之架构原则

穿过生命散发芬芳

云原生 10月月更

Object.defineProperty的缺点及Vue3为什么用Proxy

wudaxue

如何应对员工犯错?

石云升

项目管理 管理 引航计划 内容合集 10月月更

【云原生】:一文读懂Docker核心技术

息之

Docker 云原生

管理者如何带团队?

石云升

团队管理 管理 引航计划 内容合集 10月月更

学生管理系统 - 考试试卷存储方案

紫云

9月,一些感慨

程序员架构进阶

自我提升 管理者 软技能 总结思考 10月月更

独一无二的「MySQL调优金字塔」相信也许你拥有了它,你就很可能拥有了全世界。

码界西柚

性能优化 后端 MySQL 数据库 引航计划 10月月更

软件架构之原则、风格和实践

俞凡

架构

《写给互联网工程师的5G书》全文pdf开放下载

俞凡

架构 5G 网络 通信 10月月更

聊一聊差分放大器

不脱发的程序猿

嵌入式 电路设计 硬件开发 运算放大器

🏆【Spring技术专题】「动态代理技术」Spring框架中Aspectj和LoadTimeWeaving的动态代理技术实现指南

码界西柚

spring aop 动态代理 LTW 10月月更

【LeetCode】 旅行终点站Java题解

Albert

算法 LeetCode 10月月更

linux手误rm可能不需要跑路

入门小站

Linux

在线心语日历批量生成工具

入门小站

工具

2. Python函数式编程中的字符串,元组,函数的分类,高阶函数,一篇文章都介绍一遍

梦想橡皮擦

10月月更

【Flutter 专题】三步搞定会转的饼状图

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 引航计划 10月月更

javaweb springboot汽车租赁系统源码

清风

源码 springboot 计算机毕业设计

数据结构与算法 - 复杂度

小马哥

数据结构与算法 日更

1. 滚雪球学Python第四季开启,一需三吃,Python 函数式编程初识,面向过程,面向对象,函数式

梦想橡皮擦

10月月更

【LeetCode】删除无效的括号Java题解

Albert

算法 LeetCode 10月月更

第 9 章 -《Linux 一学就会》-文件的归档和压缩 tar---zip

学神来啦

Linux 运维 linux学习

springboot vue失物招领网站源码

清风

源码 Vue springboot java 计算机毕业设计

Minerva -- Airbnb的大规模数据指标系统 Part 3

俞凡

架构 Airbnb 大厂实践 指标 10月月更

容器 & 服务:Helm Charts(一)

程序员架构进阶

架构 Kubernetes 容器 Helm Charts 10月月更

SpringMVC源码分析-HandlerAdapter(4)-ModelAndViewContain组件分析

Brave

源码 springmvc 10月月更

微博系统中”微博评论“的高性能高可用计算架构

michael

#架构实战营

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