MVC MVP MVVM


MVC全名是Model View  Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种框架模式

Model:模型层,负责处理数据的加载或存储。
View:视图层,负责界面数据的展示,与用户进行交互。
Controller:控制器层,负责逻辑业务的处理。

作用:
将业务逻辑、数据、界面分离的一种代码组织方式,修改界面时无需去修改业务逻辑

流程:


1.View接受用户的请求,然后将请求传递给Controller。
2.Controller进行业务逻辑处理后,通知Model去更新。
3.Model数据更新后,通知View去更新界面显示。

关系
一个模型可以有多个视图,一个视图可以有多个控制器,一个控制器也可以有多个模型。


MVC例子实现
Model就是数据结构 对象 人
XML文件就是View层,
Activity则充当了Controller的角色。

Controller一方面接收来自View的事件,一方面通知Model处理数据。

Android中最典型的MVC莫过于ListView了,要显示的数据为Model,而要显示的ListView就是View了,Adapter则充当着Controller的角色。当Model发生改变的时候可以通过调用Adapter的notifyDataSetChanged方法来通知组件数据发生变化,这时Adapter会调用getView方法重新显示内容。具体代码这里就不分析了


MVC的优点
视图层(View)与模型层(Model)解偶,通过Controller来进行联系。
模块职责划分明确。主要划分层M,V,C三个模块,利于代码的维护。


MVC的缺点
Activity来充当Controller,但实际上一些UI也是由Activity来控制的,比如进度条等。因此部分视图就会跟Controller捆绑在同一个类了。同时,由于Activity的职责过大,Activity类的代码也会迅速膨胀。

View跟Model是有交互的,没有做到完全的分离,这就会产生耦合。

其他
避免过度设计,造成维护困难。

MVP全名是Model-View-Presenter,MVP 是从经典的模式MVC演变而来的

Model:模型层,负责处理数据的加载或存储。与MVC中的M一样。
View:视图层,负责界面数据的展示,与用户进行交互。与MVP中的V一样。
Presenter:负责逻辑业务的处理。跟MVC中的C有所区别。

作用
将Model与View彻底分离。
解决MVC中Activity职责过多,代码臃肿的问题。


 
流程


1.View接受用户的请求,然后将请求传递给Presenter。
2.Presenter进行业务逻辑处理,修改Model。
3.Presenter通知View去更新界面显示。

关系
通常View与Presenter是一对一的,但复杂的View可以绑定多个Presenter来处理逻辑


MVP例子实现
以点击按钮对数字+1为例子,将其改造成MVP模式。与MVC不同的是,一般Activty会当作View层来处理

Model不会跟View发生交互,只会跟Presenter交互。

View层
MVP中Activty也充当了View层,同时会持有Presenter的引用

interface  IView接口,暴露给Presenter的方法:

Activty  implements IView {//实现IView接口


Presenter层
负责业务逻辑处理。
IPresent接口,暴露给View调用:


MVC与MVP区别
最主要的区别就是MVP中View与Model并不直接交互,而在MVC中View可以与Model直接交互。

MVP的优点
View与Model完全分离,我们可以修改视图而不影响模型。
可以更高效地使用模型,因为所有的交互都发生Presenter中。
Presenter与View的交互是通过接口来进行的,有利于添加单元测试。

存在的问题
页面逻辑复杂的话,相应的接口也会变多,增加维护成本。可以定义一些基类去分离一些公共的逻辑。
系统内存不足时,系统会回收Activity。一般我们都是用OnSaveInstanceState()去保存状态,用OnRestoreInstanceState()去恢复状态。但是在我们的MVP中,View层是不应该去直接操作Model的,所以这样做不合理,同时也增大了M与V的耦合。解决办法是不要将Activity作为View层,可以把Activity当Presenter来处理。具体实现这里就不分析了,有兴趣的可以研究一下。
UI改变的话,比如TextView 替换 EditText,可能导致Presente的一些更新UI的接口也跟着需要更改,存在一定的耦合。

其他
MVP在实现上来说可以有多种思路,不同的实现方式其优缺点也是不同的,具体问题具体分析。

MVVM全名是Model-View-ViewModel,MVVM可以看作MVP的升级版。

Model:模型层,负责处理数据的加载或存储。与MVP中的M一样。
View:视图层,负责界面数据的展示,与用户进行交互。与MVP中的V一样。
ViewModel:视图模型,负责完成View于Model间的交互,负责业务逻辑。
 

作用
降低View和控制模块的耦合,减轻了视图的压力


流程


1.View与ViewModel进行绑定,能够实现双向的交互。ViewModel数据改变时,View会相应变动UI,反之亦然。
2.ViewModel进行业务逻辑处理,通知Model去更新。
3.Model数据更新后,把新数据传递给ViewModel。

MVVM例子实现
还是以点击按钮对数字+1为例子,将其改造成MVVM模式。与MVP不同的地方是,ViewModel会跟View进行绑定。这里会用到Android的 Data Binding


Model层

跟MVC不同的地方在于Model不会跟View发生交互,只会跟Presenter交互。

View层
改写布局,增加Data Binding。

ViewModel负责业务逻辑处理,并且数据有更新直接通知View去更改。


MVP与MVVM区别
ViewModel与View绑定后,ViewModel与View其中一方的数据更新都能立即通知到对方;

Presenter需要通过接口去通知View进行更新。

MVVM的优点
相比于MVP,Presente与View存在耦合。ViewModel与View的耦合则更低,ViewModel只负责处理和提供数据,UI的改变,比如TextView 替换 EditText,ViewModel 几乎不需要更改任何代码,只需专注于数据处理就可以了。
ViewModel里面只包含数据和业务逻辑,没有UI的东西,方便单元测试。


MVVM的缺点
数据绑定使得程序较难调试,界面出现异常时,有可能是 View 的代码有问题,也可能是 Model 的代码有问题。由于数据绑定使得数据能够快速传递到其他为止,因此要定位出异常就比较有难度了。


.其他
如果要弹Dialog等等操作,可以在Activity中监听ViewModel的数据变化来做处理。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值