什么是Parsley?

什么是Parsley?拿官方的话来说,它是一个用于Flex和Flash应用程序的应用程序框架,建立在IOC容器和消息传递框架上,可用于创建高度松耦合架构。它允许你通过元数据、MXML、XML或ActionScript配置由容器托管的对象,并且很容易扩展。

Parsley的特性

  • IOC容器。Parsley 是一个典型的IOC容器。它为依赖注入、对象生命周期管理和消息传递提供了支持。
  • 依赖注入。IOC容器的核心功能。依赖关系可以方便地使用AS3元数据标签([Inject])、MXML或XML在属性、方法或构造函数上声明。
  • 消息传递。消息传递允许对象用完全松耦合的方式来发送和接收消息。你可以用[MessageDispatcher]元数据标签来标记一个Function类型属性,当你想传递一个消息实例到系统时就调用它,系统会按路线发送给注册的接收者。接收对象可以用一些诸如[MessageHandler]之类的元数据标签来关联特定消息类型。
  • 松耦合绑定。类似于Flex绑定,不同的是目标并不需要知道绑定的源。源发布一个属性上标有[Publish]的对象,那么任何其他可能会收到更新的值的对象需要在属性上标记为[Subscribe]。
  • 管理命令。支持基于独立的Spicelib命令框架。它允许命令执行的时候容器才自动将它们添加到上下文。用MXML和XML标签来声明命令或命令的序列。它允许映射命令到消息,所以每个匹配的消息引起一个新的命令被实例化并执行。作为一种选择,命令工厂也可以注入到托管对象中来手动执行。
  • 对象生命周期。对象可以有标记为[Init](将在对象实例化和配置之后调用)或者[Destroy](将在容器摧毁的时候调用)的方法。异步初始化对象的配置选项(如对象,需要加载数据才能操作),在这种情况下,容器将延迟其他对象的初始化,直到这些配置为异步准备好了。
  • 动态视图装配。解决了使用MXML视图层次结构不用在IOC容器配置文件中声明Flex组件,Parsley允许将这些组件添加到舞台的时候和IOC容器即时连接。还解决了在Flex弹出窗口或原生AIR窗口中装配组件之类更复杂的问题。
  • 支持模块化应用程序。可以创建可配置的子上下文,并且在需要的时候可以动态的加载和卸载他们。无缝地集成了Flex模块,但是也可以不使用。框架允许一个非常细粒度的上下文层次结构,使它能方便的在你的应用程序里为单独的窗口,弹出窗口或标签页创建特定范围或上下文。
  • 本地化。允许用[ResourceBinding]标签绑定属性和资源。为Flex应用程序集成了Flex ResourceManager,并且包含Flash应用程序它自己的本地化模块。
  • 扩展性。Parsley可以作为基础来构建高层次的框架。或者你可能只是想为用例创造一些额外的配置标签,对那些对应用程序使用频繁的操作。Parsley 是很容易扩展的。

后续教程我们将针对大部分特性编写一个简单的实例以加深对Parsley的理解。

Parsley的基础

  • 非侵入性。根本没有必要为了使用Parsley的特性而扩展原有的类,很多功能用简单的标签就实现了,这些标签在其它框架中可能无法解释而忽略,但不影响其它框架对其它代码的执行。这就是所谓的框架独立。
  • 非强迫性。Parsley不强迫你使用特定和设计模式。这就是所谓的框架解耦。你可以遵循MVC模式,或者使用其他任何解耦模式。

Parsley相关概念

  • Managed Objects(管理对象):Parsley只会管理想要管理的对象。非视图组件(那些没有添加到舞台的)使用ContextBuilder进行管理,视图组件(那些通过addchild()方法添加到舞台的)使用Configure标签进行管理。Parsley管理通过ContextBuilder添加的对象的整个生命周期,它会根据需要自动创建新实例,并在不需要的情况下删除旧实例。如果你想要Parsley管理的类作为构造函数的参数,Parsley也能做到。一般来说,当视图组件从舞台移除也会同时从所属上下文移除,最后一个视图根从舞台移除相关的上下文自身也会自动销毁。(除非特别声明它不要这么做)。
  • Context(上下文):上下文在Parsley中有点类似于类的范围。 在同一上下文的对象彼此是可见的,在同一上下中可以共享其他任何管理对象。与范围一样,上下文可以嵌套,就像你在AS3中用花括号{ }来控制范围。有趣的是,Parsley通过自动和动态装配视图来实现上下文。也就是说,一旦一个组件创建了上下文,该容器的任何子视图都可以使用它。这也意味着你可以很容易地创建和管理嵌套的上下文、多层级上下文、子上下文、甚至你想调用的私有上下文。
  • Dynamic View Wiring(动态视图装配):默认情况下,Parsley的上下文与视图层次结构相联系。组件的视图子组件,或它的子类,都加入相同的上下文,这适用于整个视图层次结构。这样做的好处是,你不需要有两个层次结构(一个用于Parsley另一个用于视图),而且这只需极少额外配置。这也适用于模块,如果一个模块被当作视图子组件加载添加,它将作为其父容器所在上下文的一部分自动加入。
  • IOC(反转控制)模式又称DI(依赖注入):是一个重要的面向对象编程的法则,也是一种设计模式。主要是协调各组件间相互的依赖关系,同时大大提高了组件的可移植性,组件的重用机会也变得更多。在传统的实现中,由程序内部代码来控制程序之间的关系。我们经常使用new关键字来实现两组件间组合的关系,这种实现的方式会造成组件之间耦合(一个好的设计,不但要实现代码重用,还要将组件间关系解耦)。IoC很好的解决了该问题,它将实现组件间关系从程序内部提到外部容器来管理。也就是说由容器在运行期将组件间的某种依赖关系动态的注入组件中。控制程序间关系的实现交给了外部的容器来完成。即常说的好莱坞原则,即“你呆着别动,到时我会找你”。Parsley为我们管理依赖注入,它托管对象并在需要它们时候注入,因此可以很容易地添加新的功能。
  • Singletons(单例)。Parsley的文档有时使用术语singleton。单例模式本质上是一个类有且只用一个实例,Parsley的文档通常所指的单例是在特定上下文中的单一实例,而不是在整个应用程序的单一实例。
  • Reflection(反射):反射是一种计算机程序能够检查自己和潜在的使用这些信息来改变它在运行时的行为的能力。Flash和ActionScript的反射是一种强大的功能。反射对于Parsley意味着它可以按照你的要求阅读和检查类、调用方法、阅读和分配那些没有在应用程序显式地进行编码的类属性。通过反射,Parsley可以知道你想使用框架管理依赖注入,将一个特定实例的对象分配给另一个类的属性。

Parsley资源

官网:http://www.spicefactory.org/parsley
开发手册:http://www.spicefactory.org/parsley/docs/3.0/manual
API文档:http://www.spicefactory.org/parsley/docs/3.0/api

发表评论