组件化开发

166 阅读2分钟

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、 模块拆分

    1. 基础组件:宏、常用的分类、工具类,不会和业务线有依赖
    1. 功能组件:分享、轮播、统计、定位、推送,以后都能快速集成
    1. 业务组件:登录、实名、消息等
    1. 中间件:处理组件之间的通讯、传参、回调
    1. 宿主工程:

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、本地其他等资源的加载