MVC,MVP,MVVM

1.为什么要在我们的项目中用架构或者模式?

使用架构的目的是使程序模块化,做到模块内部的高聚合和模块之间的低耦合,使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,而且最重要的一点,架构和模式并不是说让你的代码量更少了,往往可能还会增大,但是它帮你在逻辑上更简单的了,很好的定义了单一原则,提供了更好的扩展性,方便定位问题以及后续需求变更时不至于满篇的去改一大堆东西。对于不同量级的工程,具体架构的实现方式必然是不同的,切忌为了设计而设计,为了架构而架构

2.MVC

视图层(View) 对应于xml布局文件,

控制层(Controller)
Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多,在复杂一点的页面Activity代码量达到1000+也就不足为奇了。

模型层(Model)
我们针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。

3.MVP

在Android开发中,Activity并不是一个标准的MVC模式中的Controller,本来它的首要职责是加载应用的布局和初始化用户界面,接受并处理来自用户的操作请求,进而作出响应。在MVC模式下随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

视图层(View)
负责绘制UI元素、与用户进行交互,对应于xml、Activity、Fragment、Adapter

模型层(Model)
负责存储、检索、操纵数据,一般包含网络请求,数据库处理,I/O流。

控制层(Presenter)
Presenter是整个MVP体系的控制中心,作为View与Model交互的中间纽带,处理View于Model间的交互和业务逻辑。

MVP的的具体实现就是接收到View的请求,从Model层获取数据,将数据进行处理,通过View层的接口回调给Activity或者Fragment。MVP能够让Activity成为真正的View,只做UI相关的事。它的优点还是很多的,不然也不会有这么多人喜欢它的,

优点如下:
1、模型与视图完全分离,我们可以修改视图而不影响模型;
2、项目代码结构(文件夹)清晰,一看就知道什么类干什么事情;
3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁
4、协同工作(例如在设计师没出图之前可以先写一些业务逻辑代码或者其他人接手代码改起来比较容易)

尽管这样,MVP模式也有不足之处,不然也不会推出MVVM了,缺点如下:

Presente层与View层是通过接口进行交互的,View层可能会有大量的接口,因为有可能好几个Activity都是去实现同一个View接口,那么所有用到的Activity都要去实现所有的方法(不管你是否用到),而且如果后面有些方法要删改,Presenter和Activity都要改动,比较麻烦;

MVP把Activity相当的一部分责任放到了Presenter来处理,复杂的业务同时也可能会导致P层太大,一旦业务逻辑越来越多,View定义的方法越来越多,会造成Activity和Fragment实现的方法越来越多,依然臃肿。

我为啥选择mvvm而不是熟知的mvp。

主要原因是我觉得mvp接口写起来有点麻烦,针对ui和model都得写接口,然后这个粒度不好控制如果太细了就得写一堆接口,太粗了又没有复用性,并且presenter持有了ui引用在更新ui的时候还得考虑生命周期,还有activity引用的处理防止内存泄露这些问题我都觉得挺麻烦的而MvvM中databinding框架处理好了这些问题,所以我选择了更加方便的mvvm,当然mvvm也不是没有缺点下面会说到。

4.MVVM

MVVM模式分别是Model、View、ViewModel

Model :负责数据实现和逻辑处理,类似MVP。

View : 对应于Activity和XML,负责View的绘制以及与用户交互,类似MVP。

ViewModel : 创建关联,将model和view绑定起来,如此之后,我们model的更改,通过viewmodel反馈给view,从而自动刷新界面。

通常情况下,数据的流向是单方面的,只能从代码流向UI,也就是单向绑定;而双向绑定的数据流向是双向的,当业务代码中的数据改变时,UI上的数据能够得到刷新;当用户通过UI交互编辑了数据时,数据的变化也能自动的更新到业务代码中的数据上。而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个关键的工具,它是支持双向绑定的。

View层的Activity通过DataBinding生成Binding实例,把这个实例传递给ViewModel,ViewModel层通过把自身与Binding实例绑定,从而实现View中layout与ViewModel的双向绑定。mvvm的缺点数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。

优点:
数据源被强化,利用databinding框架实现双向绑定技术,当数据变化的时候ui自动更新,ui上用户操作数据自动更新,很好的做到数据的一致性。
xml和activity处理ui操作、model提供数据、vm处理业务逻辑,各个层级分工明确,activity中代码大大减少项目整体结构更加清晰。
很方便做ui的a/b测试可以共用同一个vm。
方便单元测试ui和vm逻辑完全分离。
缺点:
bug很难被调试,数据绑定使得一个bug被传递到别的位置,要找到bug的原始位置不太容易。
由于要遵守模式的规范调用流程变得复杂。
vm中会有很多被观察者变量如果业务逻辑非常复杂会消耗更多内存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值