简介

  • 工作中运营童鞋及公司发现业务发展,需要做各种马甲,并且马甲都必须要有迭代能力,本农刚好有机会就顺便记录一下,旧项目模块化改做的难点与坑,改做后对多马甲迭代有莫大的优势。这里由于一些不可描述的问题,就不放出自动重构脚本,因为脚本目前只适合本司的项目使用,如果同行欢迎讨论。 BeeHive,CTMediator,LDBusMediator,MGJRouter,这几种我都细看了源码的实现,及结合项目做了考虑。

前言

  • 由于篇幅问题,多篇文章述对应不同内容。初步计划分四步,选项,分模块,分pod,模块系统构建,暂定这给个方法,更新频率也不会很高,因为这些我都需要时间一步步实践整理。

  • 文字不如图片直观,所以先上一张思维导图,梳理脉络。另外图片可能更新不及时,请参考思维导图链接。

  • 《思维导图链接(点我打开)最新版本》

image

解耦框架选型

选型其实目前也就找了一些网上比较多讨论的框架,自建其实也不复杂,不过有现成又满足业务的,何必在做轮子。大概有如下3类,根据参数传递,及约定解耦协议,大概可以分如下3类,优缺点思维导图中很明确,本农在不在这里在叙述了。

  • 1 URL

  • 2 NSDictionary

  • 3 protocol/代理

分仓库前期准备-重建项目结构

分析项目结构

旧项目结构

image

模块化项目结构

image

思路总结
  • 原项目是典型MVC结构,每个TAB都会有一个对应TAB的文件夹,然后每个文件夹代表一个详情页,该文件夹内又会有独立的MVC结构文件夹,并且不同TAB之间可能存在图片,代码,单例,工具类等等的相互依赖关系。

  • 所以明确方向,就是吧这部分相互依赖关系的模型,工具类。。。下沉到基本或者宿主项目中。。

  • 从新项目结构看,把其中的一个TAB拆分为独立的.a工程,而该工程会引用所有宿主工程的资源。。。。把不能拆分的部分重新整理,留在宿主中。

  • 另外,目前所有POD还是在宿主工程引用,后期会逐步精简,抽离。

项目文件配置

目前阶段,手工管理宿主工程

  • 1 编译依赖添加模块工程

image

  • 2 宿主工程引用模块的.a文件

image

  • 3 脚本重建所有头文件索引,变量主工程所有.h文件,并制作所有.h的替身文件,

image

  • 4 重建模块项目,搜索路径把POD路径,及宿主.h替身,引入项目头文件索引路径。

image

分仓库

soucre tree 子模块功能

  • 使用GIT子模块管理功能,把模块分为独立的仓库

  • 缺点,目前还是其实只是项目层面的初步解耦,但是目前业务下,基本都要设计模块GIT和宿主GIT作修改,也是相对麻烦的

  • 但是,总体私路都已经有了,按这个思路走很快就会过度到稳定期,然后就是模块改POD配置的时候了。