为什么要组件化
随着App的快速迭代,业务模块越来越复杂,开发人数越来越多。传统的开发模式会导致代码管理混乱,发布、集成、测试越来越麻烦,当项目越来越大的时候,你会发现以下一系列问题:
- 代码编译起来非常慢,每次编写代码后需要拉下别人所有更新,然后再次提交,可能还有冲突需要解决,即时你只是改动了一两行代码。
- 代码耦合严重,各个模块间相互导入,牵一发而动全身。
如何解决这些问题呢,自然是将整个项目以业务功能和基础功能进行拆分,单独制作成一个个的小组件,每个组件单独管理,最后由整个主工程统一集成所有组件,这就是组件化的基本思路。
组件化的优点:
- 加快编译速度,可以把不会经常变动的组件做成静态库,同时每个组件可以独立编译,不依赖于主工程或者其他组件
- 每个组件都可以选择自己擅长的开发模式(MVC / MVVM / MVP)
- 可以单独测试每个组件
- 多条业务线可以并行开发,提高开发效率
iOS里面的组件化主要是通过cocopods把组件打包成单独的私有pod库来进行管理,这样就可以通过podfile文件,进行动态的增删和版本管理。
首先我们要解决的问题是如何对业务模块进行拆分,这个问题没有什么标准答案,毕竟每个app的业务都不尽相同,做到拆分出的单元尽量只对应一个功能即可,然后将这些小的功能单元再次组合为一个更大的功能单元。
如图,可供参考
理论说完了,接下来就是具体的代码实操了
制作本地pod工程,即组件
1. 创建本地项目
- 打开命令行,进入你需要创建项目的文件夹下
cd /Users/sure/Desktop/iOS/XASpec
- 创建工程
pod lib create XAGuidePage
-
打开项目文件夹里面的Example文件夹下的工程,可以看到pods里面,有个ReplaceMe的文件,意思就是替换它,换成我们自己需要对外提供的类。
-
右键show in finder,在finder中将我们自己的类复制进去,删掉ReplaceMe
- 关掉项目,打开命令行,cd到XAGuidePage文件夹下的Example文件夹下,执行
pod install
重新打开项目,就能看到文件出现Pods下的Development Pods下面啦
可以通过以下方式添加依赖,注意:如果是发布到GitHub上的库,它依赖的库,必须是在GitHub上发布的,不可以依赖本地库
- 然后再Example文件夹下执行,即可添加依赖
pod install
安装依赖库
- 到这一步,本地库就已经基本完成啦(如果想要引用这个本地pod库,将本地库复制到你工程文件下,在主工程Podfile里面加入pod 'XAGuidePage', :path => './XAGuidePage'即可,注意引用时不要采用绝对路径来引用,这样别人拉取代码执行pod install时会出问题,应该采用相对路径的形式引用,这里path的值应该填写本地库podspec文件所在的文件夹,../上层文件夹,./本层文件夹(即Podfile所在文件夹),自己填写一下路径执行pod install即可)
可参考我的这篇文章
同理,炮制出多个组件库,组件间解耦可采用CTMediator框架进行。
最后项目的结构应该是这样。