【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

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

关注

评论

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

scrapy学习之爬虫练习平台3

LLLibra146

Python 爬虫 python 爬虫 Scrapy

Scrapy中process_request返回request和None的区别

LLLibra146

Python 爬虫 python 爬虫 Scrapy

DDIA 读书笔记(4)多节点数据复制方案

莫黎

读书笔记

【原创】Spring Boot集成Redis的玩法

田维常

spring Boot Starter

YOLODet--YOLO系列网络结构图(YOLOv5,YOLOv4,PPYOLO,YOLOv3)

wuzhihao7788

学习 AI 目标追踪

YOLODet 最强PyTorch版的YOLOv5、YOLOv4、PP-YOLO、YOLOv3复现

wuzhihao7788

学习 AI 目标追踪

浅析一个较完整的SpringBoot项目

田维常

spring Boot Starter

想不通(关于人生的突发奇想)

干啥啥不行的赢

scrapy学习之爬虫练习平台5

LLLibra146

Python 爬虫 python 爬虫 Scrapy

【原创】Spring Boot 集成Spring Data JPA的玩法

田维常

spring Boot Starter

scrapy学习之爬虫练习平台2

LLLibra146

Python 爬虫 python 爬虫 Scrapy

【原创】Spring Boot一口气说自动装配与案例

田维常

spring Boot Starter

【原创】Spring Boot终极篇《上》

田维常

spring Boot Starter

OpenShift 4 监控技术栈解析

东风微鸣

Kubernetes Prometheus openshift 可观察性 Thanos

专业级沙箱与恶意样本的自动化分析

京东科技开发者

云计算 监控 虚拟化

数据库JDBC:PreparedStatement

正向成长

JDBC SQL预处理 PrepareStatement

scrapy学习之爬虫练习平台4

LLLibra146

Python 爬虫 python 爬虫 Scrapy

智能驾驶看湘江:中国智能网联汽车产业的“长沙样本”

脑极体

芯片破壁者(十九):显卡的战国与帝国

脑极体

【原创】Spring Boot 过滤器、监听器、拦截器的使用

田维常

spring Boot Starter

【原创】Spring Boot终极篇《下》

田维常

spring Boot Starter

一站式低延迟直播连麦解决方案

anyRTC开发者

音视频 WebRTC 直播 RTC sdk

架构师训练营第七周作业

邓昀垚

复盘逆袭之路!三个月时间深造,怒斩拼多多、字节、蚂蚁金服破50W年薪Offer(含自学路线图)

Java架构追梦

Java 学习 架构 面试 数据结构与算法

聊点缓存——Part 1

姜雨生

redis 缓存

【原创】Spring Boot集成Mybatis的玩法

田维常

spring Boot Starter

Spring Boot 集成 Druid 监控数据源

田维常

spring Boot Starter

【原创】SpringBoot快速整合Thymeleaf模板引擎

田维常

spring Boot Starter

Spring Boot 如何快速实现定时任务

田维常

spring Boot Starter

【原创】Spring Boot 如何手写stater

田维常

spring Boot Starter

scrapy学习之爬虫练习平台爬取

LLLibra146

爬虫 python 爬虫 Scrapy

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