MVC/MVP/MVVM

作者: 山东大葱哥 | 来源:发表于2019-06-18 08:22 被阅读25次

MVC

MVC(Model、view、Controller)
M是指业务数据, V是指用户界面, C则是控制器. 在具体的业务场景中, C作为M和V之间的连接, 负责获取输入的业务数据, 然后将处理后的数据输出到界面上做相应展示, 另外, 在数据有所更新时, C还需要及时提交相应更新到界面展示. 在上述过程中, 因为M和V之间是完全隔离的, 所以在业务场景切换时, 通常只需要替换相应的C, 复用已有的M和V便可快速搭建新的业务场景. MVC因其复用性, 大大提高了开发效率, 现已被广泛应用在各端开发中。

MVP

MVC的缺点在于并没有区分业务逻辑和业务展示, 这对单元测试很不友好。
MVP(model、view、presenter)针对以上缺点做了优化, 它将业务逻辑和业务展示也做了一层隔离, 对应的就变成了MVCP。
M和V功能不变, 原来的C现在只负责布局, 而所有的业务逻辑全都转移到了P层。P层处理完了业务逻辑,如果要更改view的显示,那么可以通过回调来实现,这样可以减轻耦合,同时可以单独测试P层的业务逻辑。
MVP的变种及定义比较多,但是最终广为人知的是Martin Fowler 的发表的关于Presentation Model描述,也就是下面将要介绍的MVP。具体看下面这篇文章:
Martin Fowler 发表的 Presentation Model 文章

MVP从视图层中分离了行为(事件响应)和状态(属性,用于数据展示),它创建了一个视图的抽象,也就是presenter层,而视图就是P层的『渲染』结果。P层中包含所有的视图渲染需要的动态信息,包括视图的内容(text、color)、组件是否启用(enable),除此之外还会将一些方法暴露给视图用于某些事件的响应。

image.png

MVVM

MVVM(Model-View-ViewModel )是由微软提出来的,其实是在MVP的基础上发展起来的,在MVP的基础上改良了数据绑定。
从 Model-View-ViewModel 这个名字来看,它由三个部分组成,也就是 Model、View 和 ViewModel;其中视图模型(ViewModel)其实就是 MVP 模式中的P,在 MVVM 中叫做VM。

image

除了我们非常熟悉的 Model、View 和 ViewModel 这三个部分,在 MVVM 的实现中,还引入了隐式的一个 Binder层,这也是MVVM相对MVP的进步,而声明式的数据和命令的绑定在 MVVM 模式中就是通过binder层来完成的,RAC是iOS下binder的优雅实现,当然MVVM没有RAC也完全可以运行。

相关文章

网友评论

    本文标题:MVC/MVP/MVVM

    本文链接:https://www.haomeiwen.com/subject/jfszfctx.html