iOS 组件化

2023-06-27  本文已影响0人  FieryDragon

组件化

组件化的优点及解决的问题

实施组件化最主要的目的是为了实现模块之间的解耦,让各个模块依赖于中介者,通过中介者实现模块之间的通信以及传参;
各个组件单一职责,便于测试、修改;
并行开发;
复用。

层级

组件一般分为基础组件、功能组件、业务组件。

基础组件

系统常用功能扩展、性能检测等不依赖其他组件的组件,项目中直接使用。如UIKit扩展、网络库、路由库等。

功能组件

与业务需求没有直接关联,仅为多个应用提供具体功能的组件。如地图、分享、相机相册、前端交互等。多需要对三方库(满足项目需求、最近更新、点赞数、轻量级)二次封装。

业务组件

APP应用的具体业务组件,各组件之间通过路由进行交互。如登录、首页、设置等模块。

路由

期望:
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 组件化 —— 路由设计思路分析

上一篇下一篇

猜你喜欢

热点阅读