目录
1.1 MVC(Model-View-Controller)
1.3 MVVM(Model-View-ViewModel)
1. MVC MVP MVVM 间的区别
三者的区别如下图所示:
1.1 MVC(Model-View-Controller)
- Model:代表我们的数据模型,管理数据状态。
- View:视图,即呈现给用户的UI,比如我们的layout.xml文件及Activity。
- Controller:控制者,负责处理用户与app之间的交互,包含业务逻辑。所以是Model与View的中介,比如我们的Activity/Fragment。
缺点:如上图所示,View与Model之间还存在依赖关系,Controller很‘重’很复杂。在Android中Activity即是View又是Controller,所以会很复杂。
1.2 MVP(Model-View-Presenter)
- Model:代表我们的数据模型,管理数据状态。
- View:视图,即呈现给用户的UI,并且负责与客户进行交互。比如我们的XML/Activity/Fragment。
- Presenter:主持者,Presenter通过View接收用户的输入,然后在Model的帮助下处理用户的数据并将结果传递回View。Presenter通过接口与View进行通信。接口在presenter类中定义,它传递所需的数据。Activity/Fragment 及其他View视图组件实现此接口获得他们想要的数据并呈现数据。
优点:将View与Model解耦,方便进行单元测试。
缺点:虽然是MVC模式的演变,但Presenter依旧很‘重’很复杂。
1.3 MVVM(Model-View-ViewModel)
- Model:代表我们的数据模型,管理数据状态。
- View:视图,即呈现给用户的UI,并且负责与客户进行交互。比如我们的XML/Activity/Fragment。
- ViewModel:如上图所示,ViewModel与Presenter的区别,在MVVM中,View引用持有ViewModel,但ViewModel得不到任何关于View的信息。所以View与ViewModel之间存在着一对多的关系,一个View可以持有多个ViewModel
是MVP模式的一个优化。
2. 例子Demo
分别用MVC MVP MVVM设计模式来实现一个用户登入的功能:如下: