组件化
背景
目前共有8(北京)+3(深圳)+主端=12个组件,组件同步虽已经流程化,但目前还存在代码修改权限问题,比如在直播间需求中修改common组件,目前这种代码管理方式无法有效的控制代码范围。因此我们需要将项目组件化来有效的控制代码修改和提交权限。鉴于组件化过程中我们对于解耦或者独立组件的要求,这里提前讲下同时希望后续业务和组件开发人员在封装视图和功能类时可以遵循组件化要求,加速组件化进度。
项目结构
根据目前的结构,我们将项目划分为四层,从下往上分别为:基础层、功能层、聚合功能层、业务层。
注意:我们将主工程也作为我们一个业务层,不过我们可以不断的进行细化并拆解。
目标
完成组件化后,对于每个组件,都可以
独立编写
独立编译
独立运行
独立测试
同时对于组件:
只有组件负责人可以修改该组件
降低代码合并冲突可能
增强组件的复用性和可定制型
明确组件代码修改的影响范围
可灵活删除或增加某些业务功能
实现步骤
在实现组件化的过程我们是从底向上(基础层-功能层-聚合功能层-业务层),依次实现组件化,最终实现整个项目的组件化。
基础组件
要求
对于基础组件我们的要求是:无耦合 颗粒度细 无横向依赖
基础组件中包含的内容:
基础层(供轻量级依赖)
NSObject+UL分类
通用宏
通用内联方法
分类
AVAsset+UL
NSData+UL
NSArray+UL
…
工具类
ULBase64
ULAESCrypto
ULDeviceInfo
…
轻量级基础组件:
依赖基础组件例如 分类方法、基础宏
详细范围划分:1、基础组件私有pod列表
注意:
如果组件中用到国际化文案或者LogInfo日志需要将日志和文案放到由外部配置,后续如果要封装工具类,工具类中不要写死文案,同时不要添加日志,在外部业务中添加日志
如果组件中用到了某些分类方法,则直接在组件内增加对应分类并修改分类的方法名,保证该分类只在该组件内使用,且方法名全局唯一。
基础层所有组件都无资源的依赖(图片,文案、以及其他资源)
不使用weakSelf或strongSelf,屏幕宽高等宏
只有多个组件公用的方法才可以放到
功能组件
对于功能组件我们的要求是:无耦合 功能独立 无横向依赖 不依赖基础组件
功能组件包含的内容:
UI组件
ULAlertView
ULSlider
ULActionSheet
…
功能组件
ULLogUtil
ULDownloader
ULDataBase
…
三方库封装
AFN封装->ULNetwork
SD封装-> ULImage
OSS封装
详细划分:2、功能组件私有pod列表
注意:
1、功能组件中组件必须保证功能单一,不允许出现复合功能
2、UI组件中可能会大量依赖Masonry 因此可以将Masonry最为UI组件的基础对于UI组件大量依赖的基础方法可放到这里(屏幕宽高)
3、UI组件中不可包含写死的图片、文案等资源,所需图片和文案都需要让外部设置
4、UI组件不可包含日志,跳转方法,必须解耦到外部进行事件处理
5、某种场景下必须继承基类例如(ULFFitBoldTextLabel),具体基类后期会有wiki提供
6、不可涉及到网络请求和数据解析
7、封装控件
聚合功能组件
对于业务组件我们的要求是:功能独立
复合功能
OSS上传(接口+OSS上传)
资源下载(下载器+数据库)
…
数据模型
ULUser
ULRoom
ULVideo
…
业务组件
对于业务组件我们的要求是:业务模块独立,复合型单一功能
业务模块包含的内容:
主工程
直播
直播间组件(克拉、有读、漫播、Pika)
小说
小说组件(克拉、有读、漫播)
广播剧
广播剧组件(克拉、有读、漫播)
视频
视频组件(克拉、有读、漫播)
群组
群组组件(克拉、有读、漫播)
IM
IM 组件(克拉、有读、漫播、Pika、脱壳)
个人主页
个人主页组件(克拉、有读、漫播)
PublicBussiness
公共业务组件(克拉、有读、漫播)
捏脸
脱壳
命名规范
规范:前缀+层级+功能描述+后缀
前缀
所有组件的命名统一使用UL作为前缀
层级
目前组件层级对照为
层级 缩写
基础层 B
轻量级基础层 LB
功能层 F
业务层 W
功能描述
功能可以描述为:弹窗视图视图(Alert-View)、下载(Download-Manager)等
后缀
类型 后缀
分类 C-Category
扩展 E-Extension
继承 I-Inherit
代理 P-Protocol
正常 N-Normal
命名举例
命名 释义
ULBProxy_N 前缀-基础层-抽象类-正常
ULBNSObject_C 前缀-基础层-NSObject-分类
ULFAlertView_N 前缀-功能层-弹窗-正常
ULFNetwork_N 前缀-功能层-网络-正常
ULWLive_N 前缀-业务层-直播-正常
后期需要提供:
组件国际化文案处理
组件多端兼容资源处理
组件开关逻辑处理(本地开关+服务端开关)
各独立业务组件依赖pod list
组件间交互
Target-Action
基于CTMediator的组件化跳转
需要各组件负责人确认
私有库制作
私有pod操作流程
私有库制作待解决问题
国际化文案
图片
组件使用方式
kila私有库的公共repo地址
source ‘https://gitlab.001.com/ds_ios_client/ULKilaRepo.git’
热云SDK
pod ‘ULReYunTracking’, ‘= 1.7.1’
vtmagic 可复用的切换控制器框架
pod ‘ULMenuSwitcher’, ‘= 1.0.1’
Podfile文件增加source源,这个source源是我们制作私有pod时远端的仓库地址