这篇博简单分析了一下MVC,MVP,MVVM三种架构。
1. MVC(Model-View-Controller)
功能划分:View即视图,表示用户界面;Model即模型,主要存储数据;Controller即控制器,负责业务逻辑。
数据关系:View接受到用户的交互请求 -> View将请求转交给Controller -> Controller操作Model更新数据 -> Model更新数据后通知View更新视图。
说明:MVC的数据流是单向的,但是View可以直接访问Model。另外,用户交互请求既可以发送给View,也可以直接发送给Controller。
使用场景:在MVC中,更关注的是Model不变,但同时存在多个不同的View。这里Model不依赖View,但View依赖于Model。
缺点:因为View可以直接访问Model,那么View中必定会有一些业务逻辑,导致View和Model之间存在耦合,不利于项目的维护。
2. MVP(Model-View-Presenter)
功能划分:在MVC的基础上将Controller改为Presenter,功能依然是控制器,负责业务逻辑部分。
数据关系:View接受用户交互请求 -> View将请求转发给Presenter -> Presenter操作Model更新数据 -> Model更新数据后通知Presenter数据更新 -> Presenter更新View数据
说明:在MVP中,View和Model之间不会发生直接联系,都是通过Presenter来传递,这也是MVC和MVP之间的区别。
使用场景:当项目中有一个数据对多个不同视图显示,且逻辑经常发生变化时,MVP架构是一个很好的选择,可以将UI、逻辑和数据隔离开来。
3. MVVM(Model-View-ViewModel)
功能划分:基于MVP,将Presenter改成了ViewModel
数据关系:View接受用户交互请求 -> View将请求转发给ViewModel -> ViewModel操作Model更新数据 -> Model更新数据后通知ViewModel数据更新 -> ViewModel更新View数据
说明:MVVM的数据流向是双向绑定,View改变自动反映在ViewModel中,反之亦然。
使用场景:可以兼容MVC和MVP的使用场景,低耦合,可测试性强。