继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

续谈MVP与MVVM

桃花长相依
关注TA
已关注
手记 113
粉丝 15
获赞 56

0. 前言

之前写过Philm项目源码分解析(3): Presenter与Model的设计 ,Philm项目源码分解析(2): View与Presenter的设计Philm项目源码分解析(1): 基本概念分析Philm MVP架构的实现,最近在接触到一些关于clean architecture的话题后,又仔细读了一些关于MVP以及MVVM的文章,觉得当时的一些理解不够深入,因此针对应用架构的理论部分重新做出总结。

1. Model-View-Presenter

Martin Fowler的这篇Retirement note for Model View Presenter Pattern文章明确表明了,这个模式已经“退休”了。作为MVC模式的变形之一,它被重新归纳为了MVC模式的两种变形:Passive View和Supervisor controller。

1.1 Passive View

Passive View是MVC模式的一种变形。对于UI而言,它被分为负责显示的View和接收用户交互的Controller。Passive View是一个完全被动的View,不负责UI更新,因此也不依赖Model。

这种模式强调的是View与Model之间的独立,Controller负责全部的View与Model的同步工作,所有的消息都需要通过Controller传递。

1.2 Supervising Controller

Supervising Controller模式强调Controller只处理复杂逻辑和部分与View和Model之间的同步。Controller中尽可能减少View与Model的同步工作,将其转交数据绑定来实现,Controller只处理同步机制无法处理的复杂的交互和同步。因此,这种模式中View与Model需要直接通信,存在依赖关系。

2. Model-View-ViewModel

ViewModel可以同时和多个Domain Model交互,它并不是一个特定Domain Model为了适合View而构建的外观模式。我们可以认为ViewModel是一个特殊的,不依赖于系统GUI框架的View。此外,需要注意的是。一个ViewModel可以应用于多个View,但是一个View只能拥有一个ViewModel。

所有的事件和响应逻辑都需要ViewModel来处理,因此它的View变得很简单,这与Passive View模式很相似。它与Passive View的区别在于: ViewModel中不包含控件,控件需要依靠自己获取ViewModel中的状态。而Passive View中的Controller可以包含控件,这降低了控件自己获取状态带来的风险,但是,Passive View也因此引入了新的问题:它依赖于系统GUI控件,无法独立进行测试。

3.小结

总结一下3种模式的特点:
1) Passive View: 强调View与Model的独立,Controller负责全部的同步工作。
2) Supervising Controller:强调Controller中只处理复杂逻辑,尽可能少的负责View与Model间的同步工作。View与Model相互依赖。
3)MVVM:强调ViewModel作为一个View的抽象层,其与实际的View一对多的关系,同时其自身不依赖系统控件,方便独立测试。

原文链接:http://www.apkbus.com/blog-705730-60837.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP