这是我参与「第四届青训营 」笔记创造活动的第30天

MVC、MVP以及MVVM的异同

首要,这三种模式都是由 Model 层、View 层以及中间层(C/P/VM)构成,这三者的模型层没有太大差异,从理论来说都是数据来源;视图层在理论上都被规划为被迫,但在实际上略有不同。在实际开发中,MVC 中的 View 和 Controller 高度耦合,几乎一切的操作都统一由 ViewController 办理,可是从理论来说 MVC 期望视图层便是单纯的 View/ViewController,只需要担任 UI 的更新和交互,不涉及事务逻辑和模型更新。在实际开发中 MVP 以及 MVVM 完结了 MVC 的理论期望,即使得视图和中间层分离。可是 MVP 的视图层是完全被迫的,单纯的把交互传递给中间层;而 MVVM 的视图层并不是完全被迫的,他能够监督中间层的改变,一旦产生改变能够主动进行相应的改变

针关于中间层的规划是三种架构的核心差异。从逻辑上来说,中间层的左右便是链接视图层和模型层,用于处理交互、承受通知和完结数据更新。关于 MVC 的中间层会持有 V 和 M,首要起到拼装和连接的效果,通过传递参数和实例变量来完结一切的操作。MVP 的 Presenter 中间层持有 M,在更新 Model 上与 MVC 的 Controller 效果一致,可是他不持有 V,相反 V 持有中间层 Presenter。中间层的作业流程即:从 V 承受交互传递—>呼应—>向 V 传递呼应指令—>V 进行更新。这些悉数的操作都需要手动书写代码完结。MVVM 的中间层 ViewModel 持有 M,在更新模型上与以上两种相同。它完全独立于视图层,V 拥有中间层 ViewModel,通过绑定特点主动进行更新。悉数操作由呼应式逻辑结构主动完结

总的来说 MVC 耦合度比较高,代码分配不合理,保护和扩展本钱比较高,可是不需要进行层级传递,代码总量比较少,便于了解和应用。MVP 和 MVVM 相似,耦合度和代码分配比较合理,便于测验,可是 MVP 的视图层需要把一切的交互传递给中间层,且需要手动完结呼应和更新,代码总量远超 MVVM。MVVM 在呼应和更新上,通过呼应式结构主动进行操作,精简了代码量,可是需要引入第三方呼应式结构,同时由于特点调查环环相扣,调用栈比较大,不便于 debug