简单理解MVC MVP MVVM

在Android实际项目中一般都会涉及到设计模式,Android中使用最多的设计模式就是:MVC,MVP,MVVM这三种。合理使用设计模式,会使代码思路更清晰,更易维护。

一,MVC模型简介

             MVC的全名是 Model  View   Controller  即模型(model)— 视图(view)— 控制器(controller)

         controller :Activity、Fragment

         Model:          数据处理(数据获取,数据库等)

         VIew:            layout、VIew控件

 

使用MVC实现的需求 :

1,将数据的获取与界面的展示分离开来(将数据请求从Activity/Fragment中分离到Model中)

2,解决各层之间的通信问题(Activity通知Model去获取数据,Model通知Activity更新界面)

 MVC优缺点  :

优点:一定程度上实现了Model与View的分离,降低了代码的耦合性。

缺点:Controller 与VIew 难以完全解耦,并且随着项目复杂度的提升,Controller将越来越臃肿(Activity即是控制器,又要承担部分视图层的工作)。

 

因为Controller 与VIew 难以完全解耦,所以有的模型图是这样:

二,MVP模型简介

     MVP 即 Model - VIew - Presenter 模型

     presenter:  连接View 和Model 的纽带

     Model:        数据方面的工作

     VIew:          视图方面的工作(activity/fragment)

MVP 和MVC 的差别

1,Model 与View 不再直接进行通信,而是通过中间层presenter来实现。

2,Activity的功能被简化,不再充当控制器,主要负责VIew层面的工作。

MVP简单的功能职责划分:

使用MVC实现的需求 :

 1,MVPActivity 负责提供View层面的功能(采用接口的方式)

 2,MVPModel 负责提供数据方面的功能

 3,Model与VIew 不再直接通信,通过Presenter来实现

MVP优缺点:

优点:解决了MVC中Controller与VIew 过度耦合的缺点,职责划分明显,更加易于维护。

缺点:接口数量多,项目复杂度升高,随着项目复杂度的提升,Presenter层将越来越臃肿。

使用MVP的建议:

1,接口规范化(封装父类接口以减少接口的使用量)

2,使用第三方插件自动生成MVP代码

3,对于一些简单的界面,可以选择不使用框架

4,根据项目复杂程度,部分模块可以选择不使用接口(这里Presenter和Model没有使用接口形式,在实际项目中自行选择是否使用接口)

三,MVVM模型简介

MVVM是Model-VIew-ViewModel 的简写,MVVM在MVP的基础上实现了数据视图的绑定(Databinding),当数据变化时,视图会自动更新;反之,当视图发生变化是,数据也会自动更新。

首先简单介绍下DataBinding是什么?

   Databinding 是谷歌官方发布的一个实现数据绑定的框架(实现数据与视图的双向绑定),datebinding可以帮助我们在安卓中更好的实现MVVM模式。

DataBinding使用步骤:

1,启用DateBinding

2, 修改布局文件为DataBinding布局

3,数据绑定

(具体使用方法查看官方文档)

MVP简单的功能职责划分:

使用MVVM实现需求

1,提供View,ViewModel以及Model三层

2,将布局修改为DataBinding布局

3,View与ViewModel之间通过DataBinding进行通信

4,获取数据并展示在界面上

要想完美的使用MVVM,就需要学会DataBinbing  和 LiveData,因为DataBinding是实现MVVM数据绑定的工具,LiveData可以更好的解决MVVM的通信问题,并且可以感知组件的生命周期,能够有效的避免内存泄漏。

LiveData + ViewModel

1,LiveDate是一个可以被观察的数据持有者,它可以通过添加观察者的方式来让其他组件观察的它的变更。

2,LiveDate遵从应用程序的生命周期(如果LiveData的观察者是已经销毁状态,Livedata就不会通知该观察者)。

MVVM优缺点:

优点:实现了数据和视图的双向绑定,极大的简化代码。

缺点:bug难以调试,并且DataBing目前还存在一些编译问题。

总结:

MVC:学习简单但是解耦不够彻底

MVP:解耦更加彻底,学习起来也相对比较简单,但是代码相对比较繁琐

MVVM:代码逻辑非常简洁,但是学习成本较大。

         在实际项目中,要灵活运用设计模式,简单的项目可以不使用设计模式,或者使用MVC模式,复杂的项目可以用MVP或者MVVM。我们使用设计模式的初衷是代码简单易维护,不要为了使用设计模式而使用设计模式,还是应该怎么简单怎么来。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVC(Model-View-Controller)、MVP(Model-View-Presenter)和MVVM(Model-View-ViewModel)是常见的软件架构模式,用于组织和管理应用程序的代码。 1. MVC(Model-View-Controller): - Model(模型):负责存储和管理应用程序的数据和业务逻辑。 - View(视图):负责显示数据并与用户进行交互。 - Controller(控制器):处理用户输入,并根据输入更新模型和视图。 在MVC,模型和视图是相互独立的,通过控制器来协调数据的更新和视图的更新。用户的输入首先由控制器处理,然后控制器更新模型的状态,最后模型的变化会反映在视图上。MVC模式可以有效地分离应用程序的逻辑和界面。 2. MVP(Model-View-Presenter): - Model(模型):负责存储和管理应用程序的数据和业务逻辑。 - View(视图):负责显示数据并与用户进行交互。 - Presenter(展示器):作为View和Model之间的间人,处理用户输入并更新模型和视图。 在MVP,Presenter负责处理用户的输入,并根据输入更新模型和视图。View只负责显示数据和将用户输入传递给Presenter,而不直接与模型交互。这种分离使得视图和模型可以独立开发和测试。 3. MVVM(Model-View-ViewModel): - Model(模型):负责存储和管理应用程序的数据和业务逻辑。 - View(视图):负责显示数据并与用户进行交互。 - ViewModel(视图模型):作为View和Model之间的间人,处理视图的状态和行为,并将数据从模型转换为视图可用的形式。 在MVVM,视图通过绑定(数据绑定)与视图模型关联,当模型的状态发生变化时,视图模型会自动更新视图。这种双向绑定使得视图和模型始终保持同步,减少了手动更新视图的代码量。 总结来说,MVCMVPMVVM都是用于组织和管理应用程序的代码,它们都有各自的优势和适用场景。选择哪种架构模式取决于应用程序的需求、团队的技术背景和个人偏好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值