1、 需求来源
APP业务逐渐复杂,包含多个产品线,每个产品线有部分流程一致,有的不一致,不同的产品线开发人员都在主工程中开发,将整个工工程运行起来,代码管理,并行开发效率,分支管理,上线时间都受到了限制。
2、 初识
适合大项目,业务线多且复杂的项目,将臃肿,复杂的工程,根据功能或者属性进行分解,拆分成各个独立的功能模块或者组件,然后根据项目和业务的需求,按照某种方式,任意组织成一个拥有完整业务逻辑的工程。
但是组件化也有自身的缺点:
-
代码耦合严重
-
依赖严重
-
其他app接入某条产品先难以集成
-
项目复杂、臃肿、庞大、变异时间过长
-
难以做集成测试
-
对开发人员凯说,只能使用相同的开发模式 优点:
-
项目结构清晰
-
代码逻辑清晰
-
拆分粒度小
-
快速集成
-
能做单元测试
-
代码利用率高
-
迭代效率高
3、 必备工具
cocoaPods:组件的存在方式是以每个pod库的形式存在的,我们组合组件的方法是利用 cocoaPods 的方式添加安装各个组件,我们需要制作 cocoaPods 远程私有库,将其发到公司的gitlab上,使工程能够pod下载下来
git:基础命令
- git init
- git add README.md
- git commit -m "description"
- git remote add origin url
- git push -u origin master 创建远程私有库:
- pod lib create projectname
- echo "# test">>README.md
- git init
- git add README.md
- git commit -m "description"
- git remote add origin url
- git push -u origin master
- vim CoreLib.podspec
- git tag '1.0.0'
- pod lib lint --allow-warnings --no-clean
- pod repo add WDSpecs git@git.test/CoreLib.git
- pod repo push WDSpecs CoreLib.podspec --allow warnings
4、 模块拆分
-
- 基础组件:宏、常用的分类、工具类,不会和业务线有依赖
-
- 功能组件:分享、轮播、统计、定位、推送,以后都能快速集成
-
- 业务组件:登录、实名、消息等
-
- 中间件:处理组件之间的通讯、传参、回调
-
- 宿主工程:
5、 iOS 兼容 swift
podfile 文件 添加 use_frameworks!
6、 组件之间的通讯
使用 消息发送机制,每次启动,加载路由配置文件,通过
((id (*)(id, SEL, NSDictionary *)) objc_msgSend)((id) cls, @selector(load:), param);
((void(*)(id, SEL,NSDictionary*))objc_msgSend)((id) vc, @selector(callBack:), param);
//or
[vc performSelector:@selector(load:) withObject:param];
[vc performSelector:@selector(callBack:) withObject:param];
进行发送消息,解除了模块间的相互依赖
7、 组件化后的资源加载
图片、nib、本地其他等资源的加载