Skip to content

2. Module Assembly (模块组装)

Yizzuide edited this page Feb 14, 2017 · 3 revisions

In this section, We will talking about modular assembly. Using the modular assembly, the service is convenient. It's even better when those pieces aren't aware of each other, so that someone can assemble an application from the various independent parts.

自由组装方式

自由组装方式是一种高定制性的方式,可以在当前模块任意加不同类型的层。

组装纯代码界面模块

@implementation BDJLoginRouting

// 组装普通模块
XF_InjectModuleWith_Act([BDJLoginActivity class],
						[BJDLoginPresenter class],
						[BDJLoginInteractor class],
						[BDJLoginDataManager class])
@end

组装XIB或StoryBoard界面模块

@implementation BDJLoginRouting

// 使用字符串符号加载视图
// xib方式: x-xibName[-activityClass]
// Storyboard方式: s-storyboardName-controllerIdentifier
XF_InjectModuleWith_IB(@"x-BDJLoginActivity",
						[BDJLoginActivity class],
						[BJDLoginPresenter class],
						[BDJLoginInteractor class],
						[BDJLoginDataManager class])
@end

全自动组装方式

这是一个智能检测当前模块成份的方式,使用更简单、编码更快、更直观的方式,内部使用了框架模块解析引擎。

组装纯代码界面模块

使用这种方式时,要注意当前模块的所有层有一个统一的组件名

@implementation BDJIndexTabRouting

XF_AutoAssemblyModule_Fast

@end

组装XIB或StoryBoard界面模块

这里的格式和自由组装方式一致。

@implementation BDJIndexTabRouting

XF_AutoAssemblyModuleFromIB(@"x-BDJIndexTabActivity")

@end

组装共享模块

为什么会有共享模块?什么是共享模块?由于乐高里的模块创建后添加到内部运行容器都是单例,为了能够创建多例模块功能,框架提供了共享模块解决方案。我们知道,在乐高世界里,一个路由Routing即一个模块,想要复用一个模块,可以通过创建一个不同名的路由Routing,然后组装进想要分享的模块子层,不过框架已经提供了方便使用的宏。

例如多种类型帖子子页面就需要共享模块,它们的业务逻辑都一样(除了需要一个类型的判断),正好就可以根据当前模块名来判断,获取当前模块名详见 Module Manager 章节。

@implementation BDJPostRouting

// 组装一个共享的模块,使当前模块成为被共享状态,在其它模块视图层使用宏`XF_SubUInterface_`来动态添加子模块,不用再手动创建新的子路由类
XF_AutoAssemblyModuleForShareShell_Fast

@end