Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3334553
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类:

2010-05-19 17:05:01

8 构建模块化系统(Building Modular Applications)

    Parsley允许你建立一个可以动态加载和卸载上下文的层次结构。无论你是否使用FLEX模块,甚至在AS3系统中,这个层次都可以建立。对于Flex模块,parsley只是提供了一个额外的集成接口,可以更容易地处理多种不同ApplicationDomains。

8.1 模块上下文(Modular Contexts)

    对于较大的应用程序,你可能想将程序划分为模块。在这种情况下,最不幸的是,上下文作为一个整体,在应用程序启动时加载和初始化。即使分割成多个文件的配置如3.6所示结合多种配置机制也不会有任何帮助,因为这些文件会被合并成一个单一的上下文与加载和初始化,就好像它是一个大的配置文件。

    另一种功能就派上用场:当创建一个上下文,它可以连接到父上下文。父上下文可能是主上下文,用于在应用程序启动时加载。当加载一个模块时,就得创建子上下文。子上下文的配置文件,你可以通过依赖注入使用父上下文的任何一个对象(但不反之亦然父对象的子上下文任何配置)。消息还可通过上下文边界,取决于你的范围,通过调度。您可以创建嵌套的上下文深层次结构,但往往是结构将是相当平坦,即根上下文和任何子上下文处于同一级。

    初始化子上下文可以以二种不同方式:

连接上下文树和视图树Connecting a Context hierarchy to a view hierarchy

    当您以ContextBuilder为切入点描述一个视图根,或者当您使用的MXML ContextBuilder,自动使用它们放置在一个视图的根,然后ViewManager将上下文与视图根相关联,这里有二个目的:监听注入到上下文组件的冒泡事件,监听来自其它ContextBuilders的视图低层的冒泡事件。这样,您就不必手动指定父上下文或ApplicationDomain中,该框架将利用这一关心你

        

或者:

        var viewRoot:DisplayObject = ...;
FlexContextBuilder.build(BookStoreConfig, viewRoot);

    本例中,新的上下文将视图根自动查找父上下文,并且在视图层次树中监听子上下文。

    在某些情况下,你可能要保持上下文层次与视图层次分开。这是采用第二个方案:

手工描述父上下文Manually specifying the parent Context

    你能定义一个存在的上下文作为一个新上下文的父类,代码如下:
var parent:Context = ...;
FlexContextBuilder.build(BookStoreConfig, null, parent);

    在这种情况下,我们设置视图根参数为空,并且手工指定父类。你也必须意识到,没有视图根,上下文不能自动反射到ApplicationDomain中。所以,如果你没有使用根ApplicationDomain中,而是在一个模块加载的Flex例如子域,你还必须通过域的方法

       var parent:Context = ...;
       var domain:ApplicationDomain = ...;
       FlexContextBuilder.build(BookStoreConfig, null, parent, domain);

    另外,没有必要去描述视图根,因为构建器能自动检测父上下文和ApplicationDomain。

8.2 上下文生命周期(Context Lifecycle)

    如果你加载多个上下文实例作为模块,当你卸载一个模块时,你可能想去掉他们--而不影响父上下文。这很容易,如下所示:

          context.destroy();

    连接上下文层次结构和视图层次结构很容易。你不用明确销毁上下文,它会自动发生当最后一个视图根与上下文关联的获取从stage删除。ViewManager默认行为是调整上下文生命周期依赖视图的时间。你可以仔细调整ViewManagerFactory的属性去调整这种行为。

    当一个上下文销毁,以下行为将出现:

  • 所有在上下文中配置的对象将销毁,这将影响所有的标签MessageHandler, MessageBinding, MessageInterceptor or MessageError
  • 如果任何一个在销毁上下文中声明的对象声明了ManagedEvents,它们将被忽略,不再派发任何parsley消息。
  • 所有在销毁上下文中标识[Destroy]的方法将被调用
  • 销毁的上下文将移除所有对配置对象的内部引用,让他们可以作为垃圾回收。
  • 调用destroy后,上下文将不再使用。任何再调用该上下文的方法将抛出错误。被销毁上下文的父上下文并不受影响,可以继续正常使用。

8.3 使用FLEX模块(Using Flex Modules)

    在version2.0.x中,框架提供了一个特殊的ContextModuleMXML标签去描述模块的配置信息。这个不再需要了。框架中的ContextModule和ModuleLoader标签已经移除了。现在已完全支持FLEX模块化。你可以用正常的FLEX ModuleLoader加载一个模块或者用Flex ModuleManager。你既可以在模块内部创建子上下文,而不是在模块组件的根部。如果你象前面演示的那样连接上下文层次树和视图层次树,框架自动选择父上下文和模块的ApplicationDomain。

阅读(1875) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~