苹果典型的MVC模式,用户通过 View 将交互(点击、滑动等)通知给 Controller,Controller 收到通知后更新 Model,Model 状态改变以后再通知 Controller 来改变他们负责的 View。由于在 iOS 中我们常用的 UIViewController 本身就自带一个 View,所以在 iOS 开发中 Controller 层和 View 层总是紧密的耦合在一起,如果一个页面业务逻辑量大的话,一个视图控制器经常会很多行的代码,导致视图控制器非常的臃肿。缺陷包括如下两点:
1.厚重的ViewController
2.较差的可测试性
3.较差的可读性
MVVM(Model-View-ViewModel),其实也是基于 MVC 的。可以看出MVVM的模式解决了 MVC 模式中的一些问题,使得 ViewController 代码量减少、使得可读性变高、代码单元测试变得简单。但是 MVVM 也有其一些缺陷。
1.出现了bug第一时间定位不到 bug 的位置,有可能是 View 层的 bug 传到了 Model 层。
2.较大的工程的项目,数据的绑定和转换需要较大的成本。
其他的一些架构模式
比如MVP(Model-View-Presenter)、VIPER(View-Interactor-Presenter-Entity-Routing)、MVCS(Model-View-Controller-Store)等,其实都是基于 MVC 思想派生出来的一些架构模式,基本都是为了给 Controller 减负而生的,所以还是那句话,万变不离 MVC !
iOS新架构的需求:
组件化:对页面进行组件化解耦,这里我所使用的组件化方案是target-action方式,使用的是 Casa Taloyum的CTMediator,其主要的思想就是通过一个中间者来提供服务,通过runtime来调用组件服务。
AOP(Aspect-oriented programming),面向切面编程。在iOS中有一个应用非常多的轻量级的 AOP 库 Aspects,它允许你能在任何一个类和实例的方法中插入新的代码。
混合应用新架构需求:
uni-app是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。