整體架構圖:
ios-modulerize.jpeg
架構場景分析:
場景1:A組件內部VC互相調用:
直接實例化ViewController然后Push or Present即可
場景2:A組件的VC1調用B組件的VC2
- B組件向外暴露出Target和Action
- B組件向GMediator中注冊對應的Category,然后在Category中注冊被調用Target-Action的方法,如:Target_B類中的fetchVC2方法
- A組件調用GMediator中B組件注冊的Target-Action,拿到對應的VC2實例
- A組件對VC2實例執行Push或Present操作
場景3:外部應用通過URL調用B組件的VC2
- B組件向外暴露出Target和Action
- B組件向GMediator中注冊對應的Category,然后在Category中注冊被調用Target-Action的方法,如:Target_B類中的fetchVC2方法
- App初始化GMediator,并傳入一個路由表(包含處理某協議的組件Target名和對應的Action和Host的映射關系)
- 外部應用訪問URL Scheme, AppDelegate通過openURL或didReceiveRemoteNotification拿到URL后,調用GMediator的performActionWithUrl
- GMediator將URL解析成Target和Action,通過回調將VC2返回給AppDelegate
- AppDelegate拿到VC2實例后,直接通過
[AppDelegate shareInstance].selectedNavigationController.visibleViewController
Push或Present
場景4:A組件里的H5通過URL調用B組件的VC2
- B組件向外暴露出Target和Action
- B組件向GMediator中注冊對應的Category,然后在Category中注冊被調用Target-Action的方法,如:Target_B類中的fetchVC2方法
- H5頁面應用調用URL Scheme,WebViewVC調用GMediator的performActionWithUrl
- GMediator將URL解析成Target和Action,通過回調將VC2返回給WebViewVC
- WebViewVC拿到VC2實例后,Push或Present
場景5:A組件里的H5通過URL調用A組件里的VC1
同場景4
場景6:A組件的VC1調用B組件的VC2,并需要拿到VC2的業務處理結果
同場景2,處理結果通過傳入一個Block來實現。
注意事項:
原則上對于每個業務組件的Mediator Category,需要單獨建立一個Pod來管理(由該組件的負責人維護),避免一個業務接口升級時,影響其它業務。