Flex模块化的一种思路

    技术2022-05-12  9

    翻出两年前的代码,无意中看到写的一个模块化应用的范例。

    和大家共享。

     

    假如你碰到:

    1. 比较大的应用。

    2. 分若干个Module的应用。

    3. Module之间有比较复杂的交互。

    4. 你希望更动态的使用这些模块,开发新的模块。

    ...

    或许你需要看看这篇文章。

     

     

    提纲挈领,我们先看主程序中是如何加载一个module blog的。

    ......

    _module = ModuleManagerGlobals.managerSingleton.getModule(MODULES.BLOG);  //url of blog module

     

    _module.addEventListener(ModuleEvent.READY, onModuleLoader);

    _module.addEventListener(ModuleEvent.ERROR, onModuleError);

    _module.load();

    ......

    这个是一个典型的加载module代码。我临时把所有的module的url放在MODULES里定义,这些url可以在用户登录后,从数据库去取(ta所使用的module)。

    下面是加载完一个module的事件,当所有的module都加载完了以后,把module注册到UI上

    private function onModuleLoader(evt:ModuleEvent):void{

    var o:Object = evt.module.factory.create();

    var m:IAppModule = o as IAppModule;

    m.initModule(this.mainUI);

     

    }

     

    我们把主UI界面抽象成一个接口,在初始化module的时候,传入,这样module内部可以使用这些接口去和UI交互。

     

     

    IAppModule的方法也比较简单,

    initModule(IUI)

    uninitModule(void)

     

     

     

    在m.initModule的内部,module自己决定使用UI的某个方法。

    mainUI无非有这些接口:

    addMenuItem

    addDockItem

    add....

     

    这样,保证主程序只是一个容器,不包含任何东西(连登录module都抽离出来),所有的交互都是在Module内部的。

     

    如何在Module之间互相调用?

     

    可以做一个GlobalSession,通过它来dispatch event,在m.initModule的时候,传入,或者全局singleton.

     

    ......


    最新回复(0)