[置顶] iOS组件化、插件化、模块化之路(一)
2017-12-30 13:21
246 查看
前言:公司一年多的小项目,进行项目拆分,要求是每个业务模块都可以单独打包。在开发过程中,如:酒店模块,只修改酒店单元,测试也只测试酒店部分。模块间相互不干扰,就有了,今天组件化之路。
一、组件化的目的。
说是组件化,其实更多的是模块化,对模块之间相互之间不干扰,可以单独打包,测试,且相同模块不同项目之间的移植便利许多。和Android的插件化大同小异,尤其是使用了cocoapods管理。
二、插件化需要使用到哪些技术。
在考虑拆分时候,考虑使用的是类似携程的主项目引用子项目的模式,但是考虑到尝试使用cocoapods 管理未果,还有就是考虑到项目之间的引用比较混乱,就使用了类似百度或者阿里的插件化方案。即将主项目变成壳工程,将其余模块都变成私有pods的形式引用。
这时候我们就会考虑到使用什么技术去让模块间相互调用。git上有各自router ,可以考虑的也有有多,包括ct的,MGJ ,阿里的Been。这个着重谈一下,CTMediator 和MGJRouter.
casatwy是通过CTMediator类实现组件化的,在此类中对外提供明确参数类型的接口,接口内部通过performTarget方法调用服务方组件的Target、Action。由于CTMediator类的调用是通过runtime主动发现服务的,所以服务方对此类是完全解耦的。但如果CTMediator类对外提供的方法都放在此类中,将会对CTMediator造成极大的负担和代码量。解决方法就是对每个服务方组件创建一个CTMediator的Category,并将对服务方的performTarget调用放在对应的Category中,这些Category都属于CTMediator中间件,从而实现了感官上的接口分离。但是实际过程中,还是通过CTMediator 对象,用runtime 创建对应的方法,然后当有这个对应方法时,之间运行实现方法。
蘑菇街的组件化方案,更像是一个中间件,中间件的注册用一个字典来保持,拿到url 将url 逐层拆分,然后将一个block 和url、回调的block 对应保存。当使用open url的时候,运行对应的Block 和回调的block 。
组件化过程中如何管理。
因为MGJRouter 需要一个注册的过程,并且需要知道注册的Url 才能调用。所有需要有一个保存的过程,这个创建一个文档用来保存对应的名称 url 用途,传参数等。另外,项目中使用私有pods 可以很容易的区分版本,只要保存podfile对应的私有pods 的版本号即可。即使私有私有pods 已经上传至服务端。
三、项目的基本架构
每个BU相互独立,但是唯一没有解耦的是,相互的之间的调用需要注册,如果使用的是CTMediator可剩下注册这步,完全解耦。
一、组件化的目的。
说是组件化,其实更多的是模块化,对模块之间相互之间不干扰,可以单独打包,测试,且相同模块不同项目之间的移植便利许多。和Android的插件化大同小异,尤其是使用了cocoapods管理。
二、插件化需要使用到哪些技术。
在考虑拆分时候,考虑使用的是类似携程的主项目引用子项目的模式,但是考虑到尝试使用cocoapods 管理未果,还有就是考虑到项目之间的引用比较混乱,就使用了类似百度或者阿里的插件化方案。即将主项目变成壳工程,将其余模块都变成私有pods的形式引用。
这时候我们就会考虑到使用什么技术去让模块间相互调用。git上有各自router ,可以考虑的也有有多,包括ct的,MGJ ,阿里的Been。这个着重谈一下,CTMediator 和MGJRouter.
casatwy是通过CTMediator类实现组件化的,在此类中对外提供明确参数类型的接口,接口内部通过performTarget方法调用服务方组件的Target、Action。由于CTMediator类的调用是通过runtime主动发现服务的,所以服务方对此类是完全解耦的。但如果CTMediator类对外提供的方法都放在此类中,将会对CTMediator造成极大的负担和代码量。解决方法就是对每个服务方组件创建一个CTMediator的Category,并将对服务方的performTarget调用放在对应的Category中,这些Category都属于CTMediator中间件,从而实现了感官上的接口分离。但是实际过程中,还是通过CTMediator 对象,用runtime 创建对应的方法,然后当有这个对应方法时,之间运行实现方法。
蘑菇街的组件化方案,更像是一个中间件,中间件的注册用一个字典来保持,拿到url 将url 逐层拆分,然后将一个block 和url、回调的block 对应保存。当使用open url的时候,运行对应的Block 和回调的block 。
组件化过程中如何管理。
因为MGJRouter 需要一个注册的过程,并且需要知道注册的Url 才能调用。所有需要有一个保存的过程,这个创建一个文档用来保存对应的名称 url 用途,传参数等。另外,项目中使用私有pods 可以很容易的区分版本,只要保存podfile对应的私有pods 的版本号即可。即使私有私有pods 已经上传至服务端。
三、项目的基本架构
每个BU相互独立,但是唯一没有解耦的是,相互的之间的调用需要注册,如果使用的是CTMediator可剩下注册这步,完全解耦。
相关文章推荐
- iOS 组件化,插件化,模块化设计思路分析
- iOS 组件化,插件化,模块化设计思路分析
- Android 组件化-模块化之路——在展示层搭建MVP结构
- Android组件化、模块化、插件化
- Android 组件化/模块化之路——在展示层搭建MVP结构
- 模块化?组件化?插件化?热更新?热修复?
- App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南
- s2sh大型项目模块化开发(插件化开发或组件化)的实现
- 从模块化到组件化再到插件化
- [Android]如何做一个崩溃率少于千分之三噶应用app(23)-组件化&模块化&插件化演进
- iOS 混编 模块化/组件化 解耦
- Android碎碎念 -- 组件化、模块化、插件化
- Android 模块化 组件化 插件化的关系
- iOS第三方平台集成组件化续集(以插件化的方式添加自定义的第三方平台)
- 围观神仙打架,反革命工程师《iOS应用架构谈 组件化方案》和蘑菇街Limboy的《蘑菇街 App 的组件化之路》的阅读指导
- iOS 混编 模块化/组件化 经验指北
- App 组件化/模块化之路——如何封装网络请求框架
- [置顶] 使用阿里ARouter路由实现组件化(模块化)开发流程
- iOS 混编 模块化/组件化 经验指北
- App 组件化/模块化之路——Repository 模式