组件化学习
原文地址:
下面是对作者的思想的一些总结,不代表我们自己的组件化也要这么做(或者这么做,或者不这么做),我们自己的组件化还需要在实践中不断完善,这里先理解清楚作者的意图。
远程调用和本地调用分开
远程调用就是app外部调用app的某个模块
本地调用就是app内部模块间的相互调用
理由是:
- 远程App调用处理入参的过程比本地多了一个URL解析的过程,这是远程App调用特有的过程
- 对于无响应请求的处理方式:远程和本地可能不一样,所以要分开。如果都采用同样的方式,对于本地调用无响应的结果,很可能产品经理会不同意展示一个404页面,而导致架构改变,而加班。
不使用URL注册,使用runtime机制即可,不维护注册列表
使用openURL的方式实现组件化是错误的
理由是:openURL的方式无法传递非常规参数。
组件化方案中的去model设计
参数最好以字典的方式去传递
实现方式:
- CTMediator 提供转发的基础服务
- CTMediator+CTMediatorModuleAActions 提供和模块A有关系的所有调起
- Target_A提供具体要执行方法
- 调用模块依赖被调用模块的Category,例如想要调起A模块的页面,要依赖CTMediator+CTMediatorModuleAActions。
- category中定义的具体方法,限制了传参,可以保证只有满足正确的参数,才可以被执行。
一些安全措施
如何防止别人通过url调用本地页面:远程调用和本地调用分开后,这个问题就好解决了,采用给action添加native前缀去做的,凡是带有native前缀的就都只允许本地组件调用。