iOS爱康APP组件化架构
随着公司业务需求的不断增加以及快速产出,要对应用的架构做相关的设计和优化,使可以快速复用扩展、减少耦合、减少开发时间成本、减少测试成本等。基础框架架构就是为解决这些问题所设计的。
二、设计
对公司业务、功能进行梳理分析,然后对相关模块进行切割分层。我们的基础框架架构设计思路是按照纵向切割,横向切割及立体扩展三方面下手:
基于纵向切割:针对各业务模块、各功能模块的单一业务和单一功能进行封装,防止对于非自己职责范围的业务和功能的依赖。
基于横向切割:针对业务层级,功能层级、基础依赖层级进行分层,方便使用者从不同的层级去集成。
基于立体扩展:方便快速集成扩展输出APP。
具体基础框架架构设计如下图所示:
三、实现
对上图的基础框架架构设计的基础功能模块层,UI组件层及业务模块层相关分层实现细节及注意事项详细说明,具体如下:
1.网络组件
主要是对AFNetworking以及JSONModel进行封装,实现单一的方法进行网络请求以及解析成相应的数据model。并且可以很方便的设置请求类型以及访问的哪一处服务。
2.UI工具组件
主要封装了Masonry、SDWebImage、MJRefresh,实现了对系统UI控件的封装以及自定义,封装VC的父类,方便各个组件继承使用API。包含工具包、基类包、类别包、还有所有用到的宏。
3.路由中间件
采用了Target-Action方案,使用runtime配合NSInvocation实现了页面间任意跳转以及调用任意类的实例方法以及类方法,实现部分业务逻辑的URL路由跳转,以及AppDelegate钩子,用于解耦繁重的AppDelegate。
4.弹窗组件
用于各种页面弹出loading、toast、alert等等以及各种角度的弹出View,方便整个APP进行调用。
5.资源组件
封装所有UI页面用到的图片以及字体,全部资源统一管理。方便排查重复图片以及更换更新图片资源。
6.按钮组件
通过对UIControl的封装实现自定义按钮,可以对按钮的图文位置进行编译以及实现不通状态下各个属性颜色的变化。
7.环境变量
主要是用于封装网络环境的配置以及网络环境的变量,方便APP在DEBUG阶段可以任意切换测试、UAT、预生产、生产等环境,以及可以根据POD不同的环境变量组件实现组件内网络环境是相应APP的。
8.辅助功能组件
主要用于组件间所用到的相同的功能点,进行单独的抽离封装。使功能更加单一。
9.业务组件
业务模块专注单一,当前功能模块可能会依赖不同的辅助组件,对其功能做多样化扩展方便适配不同的APP,接口以及调用方式简单化,方便中间件对其进行初始化以及跳转,对不同的业务功能组件进行解耦避免依赖。
四、架构优化注意事项
无论封装什么样的模块,注意这几个设计原则:复用、依赖倒置、单一、接口隔离
使用简单化、耦合减少化、复用扩展化。
对于组件间接口的封装避免使用代理回调
对于第三方组件以及SDK,尽量对其接口进行封装隔离后再调用,避免因为第三方更新方法废弃或者更新造成大面积改动