翻出两年前的代码,无意中看到写的一个模块化应用的范例。
和大家共享。
假如你碰到:
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.
......