iOS-组件化
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
通过问题看本质!!!
组件化目的:
组件化可以明确业务模块职责及边界,降低模块之间的耦合以减少复杂依赖,提高代码可维护性,提高业务模块调度的规范性、灵活性,后续也可进一步优化编译速度。
那什么时候要做组件化呢?随着项目功能的复杂提升,各个业务代码耦合越来越多。这个时候就可以开始考虑组件化了。
通俗的讲,就好比你去宿舍附近的便利店买东西,直接走过去就到了。就没有必要打车了,打车效率还更低了呢。
如果你去公司(车程半小时),就有必要打车或者公交车了,走路那得多慢啊,等你走到了,估计都矿工几小时了。
组件化方案
1. URL路由方案;
2. runtime反射调用(简单反射及二次封装Target-action)
3. Target-action(category及动态调度);
4. protocol方案;
5. notification方案;
组件化的方案有很多种,没有哪种最好,只有哪种最合适。常见的是url-block、protocol-class、target-action方案。所以参考了网上的一些文章,对这3种方案做了一下简单的对比。
url-block 蘑菇街
路由中心维护一张路由表,url为key,block为value。
优点:
1、统一iOS、安卓的平台差异性
缺点:
1、url参数收到限制,只能传常规的字符串参数,无法传递data、image参数;
2、无法区分本地和远程情况;
3、组件本身依赖中间件,且分散注册的耦合较多;
4、启动时提供注册服务,保存在内存中。
protocol-class
优点:
1、扩展了本地调用的功能;
2、通过实现接口来提供服务,只是中间加了一层wrapper;
3、通过protocol-class做一个映射,在内存中保存一张映射表;
缺点:
还是存在内存中维护注册表的问题
target-action
使用target-action方式实现组件间的解耦,本身功能完全独立,不依赖中间件。
1、通过runtime进行反射,直接调用。
2、生成方法签名,通过invocation对象,直接执行invoke方法。
3、通过组件包装一层wrapper来给外界提供服务,不会对原组件代码造成入侵。
4、中间件是通过runtime来调用组件服务的,中间件的catergory提供服务给调度者。
5、使用者只需要依赖中间件,中间件又不需要依赖组件。
作者:龙在掘金62077
链接:https://juejin.cn/post/7023972006957678599