Flex模块化的一种思路

本文介绍了一种模块化应用程序的设计方案,适用于大型应用及模块间复杂交互的场景。通过ModuleManager进行模块加载与管理,实现模块间的松耦合,并提供一种灵活的方式支持模块动态加载与扩展。

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

和大家共享。

 

假如你碰到:

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.

 

......

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值