一、模块化设计概念
模块化的核心目标是 解耦,将一个大型应用拆分为若干功能模块(Feature Module),如用户模块、支付模块、直播模块等,各模块可独立开发、编译、测试。
优势
- 降低耦合,提高复用性
- 提高团队并行开发效率
- 支持增量构建、热修复、动态下发
- 为组件化和插件化打下基础
二、iOS 模块化架构设计方案
1. 模块划分方式
按功能、业务域或技术层进行模块拆分:
- 功能模块:登录模块、支付模块、IM模块等
- 技术层模块:网络层(Network)、数据层(Storage)、工具库(Utils)
2. 模块组织结构(以 CocoaPods 为例)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | App/├── AppMain/
 │   └── AppDelegate、路由注册入口等
 ├── Modules/
 │   ├── Login/
 │   │   ├── LoginModule.podspec
 │   │   └── Source/
 │   ├── Home/
 │   │   └── HomeModule.podspec
 │   └── ...
 └── Pods/
 
 | 
3. 模块依赖管理工具
- CocoaPods(最常用,支持本地开发)
- Swift Package Manager(推荐新项目使用)
- Carthage(已不太流行)
三、路由机制设计
模块之间不能直接引用,如何在不耦合的前提下跳转页面或调用服务?这就需要路由机制。
常见路由框架
路由实现核心思想
- 注册:每个模块在初始化时向全局路由中心注册自己的路由路径和对应 handler。
- 路由表:以 path 为 key,保存 handler。
- 调用:其他模块通过 URL 或 identifier 发起路由调用,传参。
四、实践方案示例(MGJRouter)
1. 路由注册(Login 模块中)
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | #import <MGJRouter/MGJRouter.h>
 + (void)load {
 [MGJRouter registerURLPattern:@"myapp://login" toHandler:^(NSDictionary *routerParameters) {
 UIViewController *vc = [[LoginViewController alloc] init];
 UINavigationController *nav = routerParameters[MGJRouterParameterUserInfo][@"nav"];
 [nav pushViewController:vc animated:YES];
 }];
 }
 
 | 
2. 发起路由调用(Home 模块)
| 12
 
 | [MGJRouter openURL:@"myapp://login"withUserInfo:@{@"nav": self.navigationController}];
 
 | 
五、进阶实践:服务路由 + 解耦通信
1. 定义协议
| 12
 3
 
 | @protocol UserService <NSObject>- (BOOL)isLoggedIn;
 @end
 
 | 
2. 注册服务实现
| 1
 | [Router registerService:@protocol(UserService) withImpl:[UserServiceImpl class]];
 | 
3. 获取服务调用
| 12
 
 | id<UserService> service = [Router serviceForProtocol:@protocol(UserService)];BOOL loggedIn = [service isLoggedIn];
 
 | 
六、推荐实践建议
- 路由机制与模块初始化解耦,可结合 AOP(例如 +load或RouterRegister注册文件自动管理)
- URL路由适合页面跳转,协议路由适合服务调用
- 路由支持中间件拦截(如登录校验)
- 模块间只暴露接口,禁止直接引用源文件
七、参考项目结构建议
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | Modules/├── Login/
 │   └── LoginModule/
 │       ├── Interface/
 │       │   └── LoginService.h
 │       └── Impl/
 │           └── LoginViewController.m
 ├── Router/
 │   └── RouterCenter/
 │       ├── MGJRouter 封装
 │       └── 服务注册表
 
 |