组件化
组件化的优点及解决的问题
实施组件化最主要的目的是为了实现模块之间的解耦,让各个模块依赖于中介者,通过中介者实现模块之间的通信以及传参;
各个组件单一职责,便于测试、修改;
并行开发;
复用。
层级
组件一般分为基础组件、功能组件、业务组件。
基础组件
系统常用功能扩展、性能检测等不依赖其他组件的组件,项目中直接使用。如UIKit扩展、网络库、路由库等。
功能组件
与业务需求没有直接关联,仅为多个应用提供具体功能的组件。如地图、分享、相机相册、前端交互等。多需要对三方库(满足项目需求、最近更新、点赞数、轻量级)二次封装。
业务组件
APP应用的具体业务组件,各组件之间通过路由进行交互。如登录、首页、设置等模块。
- Common
各组件都会用到资源、类等。
也可以将重复模型类copy一份至各组件中,但需做好控制(如脚本检测)避免修改时影响其他组件。
路由
期望:
1.各模块管理各自事件
2.页面跳转、数据传递、数据获取
3.实时return;异步处理block返回
4.内部管理系统(AppDelegate)事件
5.模块加载优先级、同步或异步加载
6.消息通知
7.未找到提示
我们选择了路由 URL + 远程接口调用封装 + 广播相结合的方式。
使用路由URL统跳方案的优势是动态性及多端统一 (H5, iOS,Android,Weex/RN); 缺点是需提前注册。
通过事件注册的方式来实现远程接口调用的,即每个模块提供自己对外事件声明。调用方能从中间层看到存在哪些事件接口,然后直接调用即可。
- 区分其他路由跳转
协议开头
URL Scheme
JLRoutes
AppDelegate内注册事件,组件或事件较多时或导致AppDelegate过于庞大、多个项目复用组件时需要迁移注册事件、无法通过路由获取组件数据。
routable-ios
AppDelegate内注册事件,组件或事件较多时或导致AppDelegate过于庞大、多个项目复用组件时需要迁移注册事件、无法通过路由获取组件数据。
Target - Action
CTMediator
CTMediator分类放在哪一层
无法处理异步处理返回数据
Protocol - Class 匹配
BeeHive
优点:
内部管理系统(AppDelegate)事件
支持模块静态(plist)和动态(load)注册
模块优先级
缺点:
协议类放在哪一层
无法处理异步处理返回数据
参考资料
有赞移动 iOS 组件化(模块化)架构设计实践
组件化(一)组件化简介(基础概念)
iOS 路由总结大全
iOS 路由 组件化 Target-Action 方案(推荐)
iOS:组件化的三种通讯方案
iOS 组件化 —— 路由设计思路分析
网友评论