美文网首页
iOS 组件化

iOS 组件化

作者: FieryDragon | 来源:发表于2023-06-27 17:49 被阅读0次

    组件化

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

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

    层级

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

    基础组件

    系统常用功能扩展、性能检测等不依赖其他组件的组件,项目中直接使用。如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 组件化 —— 路由设计思路分析

    相关文章

      网友评论

          本文标题:iOS 组件化

          本文链接:https://www.haomeiwen.com/subject/inltkrtx.html