「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。
- 本文主要记录组件化学习
1. 组件化的概念
1. 为什么要组件化
- 为了防止项目过于臃肿庞大,有了组件化的需求。功能模块之间依赖,使用组件化后不断把模块的颗粒度不断下降只要暴漏出相对应的接口,服务给别人使用。这样就提高了效率,也
降低了模块间的耦合度。 - 对于一些基础的模块,可以
重用。 - 提高团队协作
开发效率 - 方便
单元测试
1.2 项目不需要组件化
- 项目比较小,模块间交互简单,耦合少。
- 模块没有被多个外部模块引用,只是一个单独的小模块。
- 模块不需要重用,代码也很少被修改。
- 团队规模很小
1.3 组件化分层
因此我们要对组件进行划分比如:
基础模块:配置,网络请求等。通用模块:常用控件,数据管理,三方登陆/分享。业务模块:首页,个人中心等
只能上层对下层依赖 项目公共代码资源 下沉 横向的依赖 最好下沉
2. 本地组件化
2.1 创建Demo
我们先创建一个工程
集成cocopods:pod init 后进行install
2.2 创建组件
假设我们需要的模块有下面这些
主工程:承载主要的表层业务代码Core:独立存在,应用加密、接口请求等敏感代码Base:基类封装,拓展,基本的数据处理Service:服务层,封装业务工具类,例如网络层服务、持久化服务等Pods:三方依赖
我们这里以Base为主,创建的方式和我们创建framework类似。
- 创建Framework
添加到当前workspace中(创建的library最好放在主工程根目录下,否则后续podfile执行pod install时会报错)
- 设置Framework
- 将创建的
library的Build Settings -> Mach-O Type修改为静态库Static Library
- 将创建的
我们定义一个baseView ,添加一个测试方法。导入
暴漏出,供主工程使用。
添加framework
导入头文件后使用
1.3 使用cocoapods管理三方依赖
如果我们基础的framework需要依赖三方的库,比如我们导入布局相关的masonry
#配置workspace路径
workspace 'ModularizationDemo.xcworkspace'
################# 三方依赖
# 公有
def workspace_pods
pod 'SDWebImage'
end
# 主工程
def project_only_pods
pod 'Masonry'
end
#网络
def network_layer_pods
pod 'AFNetworking'
end
################# 模块
target 'BaseModularization' do
#配置libray路径
project 'BaseModularization/BaseModularization.xcodeproj'
workspace_pods
network_layer_pods
end
################# 主工程
target 'ModularizationDemo' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
workspace_pods
project_only_pods
network_layer_pods
# Pods for ModularizationDemo
target 'ModularizationDemoTests' do
inherit! :search_paths
# Pods for testing
end
target 'ModularizationDemoUITests' do
# Pods for testing
end
end
组件中使用