背景
当团队发展到一定规模,各业务之间相互影响问题剧增(合作成本变高),就开始进行模块化之路。
- 模块化的说法:
更准确的说法是模块化,而不是组件化。
- 模块化:是横向划分,各业务模块之间有依赖关系,往往通过路由器解耦。
- 组件化:是纵向划分,更多的是基础组件,各组件相互独立。
原理
主流都是通过路由器进行解耦,通过CocoaPods、git进行业务模块分割,对应技术框架有Mediator、JLRouter、CRN等。
路由
-
我们先看看目前的状态,引用一张图说明:
没错,就是相互引用,耦合很严重。我们想做什么?VC都不要依赖其它的VC。引用一张图说明:
我们就希望VC就只引入中间类(比如Router)就好了,不需要知道其它的控制器。这样是不是很爽?让我们看看怎么设计。
我们需要通过中间类跳转,那么A->中间类->B的过程:
- A->中间类:必然有参数的传递(商品ID、闭包等),也包含B所对应的标识(类名、路径、其它标识)。
- 中间类->B:通过获取前面拿到的信息,我们根据B的标识,对应到正确的控制器,获取到界面所需参数,并通过闭包,回调给A。
预期结果
我用路由就可以模块化了吗?不行,你代码写一块,可以确保不会改到其它业务模块吗?答案是否定的。所以我们需要通过CocoaPods、git进行管理。我不用CocoaPods,可以进行管理吗?也可以,比如Workspace管理+git形式,RN+git形式等都可以。最后通过路由配置进行业务模块的管理(这里并没有写控制器,因为并不是所有控制器都对外)
JLRoutes的二次封装思路
初步的设计思路,所以还有很多没考虑到的地方。仅供参考。
扩展
想深入了解的,还是需要了解一下主流的一些方案。