组件化学习(一)

195 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

  • 本文主要记录组件化学习

1. 组件化的概念

1. 为什么要组件化

  1. 为了防止项目过于臃肿庞大,有了组件化的需求。功能模块之间依赖,使用组件化后不断把模块的颗粒度不断下降只要暴漏出相对应的接口,服务给别人使用。这样就提高了效率,也降低了模块间的耦合度
  2. 对于一些基础的模块,可以重用
  3. 提高团队协作开发效率
  4. 方便单元测试

1.2 项目不需要组件化

  1. 项目比较小,模块间交互简单,耦合少。
  2. 模块没有被多个外部模块引用,只是一个单独的小模块。
  3. 模块不需要重用,代码也很少被修改。
  4. 团队规模很小

1.3 组件化分层

因此我们要对组件进行划分比如:

  • 基础模块:配置,网络请求等。
  • 通用模块:常用控件,数据管理,三方登陆/分享。
  • 业务模块:首页,个人中心等

image.png

只能上层对下层依赖 项目公共代码资源 下沉 横向的依赖 最好下沉

2. 本地组件化

2.1 创建Demo

我们先创建一个工程 image.png

集成cocopods:pod init 后进行install

image.png

2.2 创建组件

假设我们需要的模块有下面这些

  • 主工程:承载主要的表层业务代码
  • Core:独立存在,应用加密、接口请求等敏感代码
  • Base:基类封装,拓展,基本的数据处理
  • Service:服务层,封装业务工具类,例如网络层服务、持久化服务等
  • Pods:三方依赖

我们这里以Base为主,创建的方式和我们创建framework类似。

  • 创建Framework

image.png

添加到当前workspace中(创建的library最好放在主工程根目录下,否则后续podfile执行pod install时会报错) image.png

  • 设置Framework
    • 将创建的libraryBuild Settings -> Mach-O Type修改为静态库 Static Library image.png

我们定义一个baseView ,添加一个测试方法。导入

image.png

暴漏出,供主工程使用。

image.png

添加framework

image.png

导入头文件后使用

image.png

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

组件中使用

image.png