美文网首页
iOS AppDelegate入口解耦

iOS AppDelegate入口解耦

作者: ZJ_偶尔上路 | 来源:发表于2017-09-01 13:35 被阅读0次

    说到解耦,可能大部分人会潜意识的认为业务组件间的解耦是最根本的,也是最重要的。这个说法个人认为没什么问题,今天所说的就是业务组件间解耦的一部分----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对象的协议方法,当然,这个遍历数组、调用方法的实现应该放在单例类里面实现。

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

    image.png

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

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

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

    相关文章

      网友评论

          本文标题:iOS AppDelegate入口解耦

          本文链接:https://www.haomeiwen.com/subject/wgvtjxtx.html