iOS AppDelegate入口解耦

释放双眼,带上耳机,听听看~!

说到解耦,可能大部分人会潜意识的认为业务组件间的解耦是最根本的,也是最重要的。这个说法个人认为没什么问题,今天所说的就是业务组件间解耦的一部分—-AppDelegate入口解耦。

首先想一下我们在做组件化的过程:主工程一般成员是没法看到的,更别说去操作了,只有老大才能根据团队成员的需要去做一些配置、管理什么的。团队成员做业务组件的时候是在一个新的工程进行的,在example里面进行测试,最终cocoapods化,或者二进制化。

这个时候就会出现一个问题,如果你的业务组件需要在主工程的AppDelegate里面处理一些事情,比如说环境配置、推送、初始化第三方等,那应该怎么处理?一般情况我们在开发的时候会在业务工程里面的AppDelegate里直接进行操作,最后集成到主工程的时候告知老大在主工程的AppDelegate里面进行相应配置。

这样做的问题在哪呢?

  1. 业务组件的解耦不彻底,需要依赖主工程的AppDelegate。
  2. 工程师不能方便的管理自己的业务工程的AppDelegate。
  3. 增加了工程师的时间开销,效率降低。
  4. AppDelegate不便维护。

如何去解决这个问题呢?

  • 核心问题1:让每个组件都可以拥有类似UIApplicationDelegate代理方法这样的在AppDelegate执行的方法 。
  • 核心问题2:在主工程的AppDelegate对应的UIApplicationDelegate代理方法里面实现所有业务组件需要在该代理方法实现的内容。

实现思路:

核心问题1 的解决:使用协议,协议里面声明的就是类似UIApplicationDelegate代理方法。业务组件里面添加一个遵循这个协议的对象,实现你想在AppDelegate里面实现的对应方法。
核心问题2 的解决:使用单例类,添加全局变量NSMutableArray用于存放各业务组件里面的问题1中的对象,在主工程AppDelegate的代理方法里面遍历数组调用各业务组件里面问题1对象的协议方法,当然,这个遍历数组、调用方法的实现应该放在单例类里面实现。

实现思路是这样的,具体实现给大家提供一个示例:

DMUserCenterModule:用户中心模块上面提到的对象。
DMApplicationDelegate:上面提到的协议。
DMAppDelegateManager:单例类。

DMUserCenterModule维护在各个业务组件里面;
DMApplicationDelegate、DMAppDelegateManager 一般维护在与业务不太相关的弱组件库里面。

具体实现就不做过多说明。

人已赞赏
iOS文章

iOS 闪光灯的打开、关闭

2019-10-16 5:04:28

iOS文章

iOS开发之tableView时报错Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]

2019-10-16 9:21:37

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索