首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ANDROID MVP交互器与MVVM存储库

基础概念

MVP(Model-View-Presenter)

  • Model:负责数据管理和业务逻辑。
  • View:负责显示数据和用户界面。
  • Presenter:作为View和Model之间的桥梁,处理用户输入并更新Model和View。

MVVM(Model-View-ViewModel)

  • Model:与MVP中的Model相同,负责数据管理和业务逻辑。
  • View:与MVP中的View相同,负责显示数据和用户界面。
  • ViewModel:作为View和Model之间的桥梁,负责处理View的逻辑并提供数据绑定。

优势

MVP

  • 分离关注点,使得代码更易于测试和维护。
  • Presenter可以独立于View进行单元测试。
  • 适用于复杂的应用场景,特别是需要高度控制UI逻辑的情况。

MVVM

  • 数据绑定简化了UI更新的过程。
  • ViewModel可以独立于View进行单元测试。
  • 适用于需要频繁更新UI和数据绑定的场景。

类型

MVP

  • Passive View:View非常薄,只负责显示数据,所有逻辑都在Presenter中。
  • Supervisor Controller:Presenter负责管理多个子视图。

MVVM

  • Standard MVVM:基本的MVVM架构,ViewModel通过数据绑定与View通信。
  • Advanced MVVM:结合了LiveData、Room等组件,提供更强大的功能。

应用场景

MVP

  • 适用于需要高度控制UI逻辑的复杂应用。
  • 适用于需要频繁更改UI布局的项目。

MVVM

  • 适用于需要频繁更新UI和数据绑定的项目。
  • 适用于需要快速开发和迭代的项目。

常见问题及解决方法

MVP

  • 问题:Presenter和View之间的耦合度较高。
    • 解决方法:使用接口定义View和Presenter之间的通信,降低耦合度。

MVVM

  • 问题:数据绑定可能导致性能问题。
    • 解决方法:合理使用LiveData和ObservableField,避免不必要的数据更新。

示例代码

MVP示例

代码语言:txt
复制
// View接口
public interface MainView {
    void showData(String data);
}

// Presenter
public class MainPresenter {
    private MainView view;
    private Model model;

    public MainPresenter(MainView view, Model model) {
        this.view = view;
        this.model = model;
    }

    public void fetchData() {
        String data = model.getData();
        view.showData(data);
    }
}

// View实现
public class MainActivity extends AppCompatActivity implements MainView {
    private MainPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Model model = new Model();
        presenter = new MainPresenter(this, model);
        presenter.fetchData();
    }

    @Override
    public void showData(String data) {
        TextView textView = findViewById(R.id.textView);
        textView.setText(data);
    }
}

MVVM示例

代码语言:txt
复制
// ViewModel
class MainViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> get() = _data

    fun fetchData() {
        val data = Model.getData()
        _data.value = data
    }
}

// Activity
class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

        viewModel.data.observe(this, Observer {
            textView.text = it
        })

        viewModel.fetchData()
    }
}

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用代码手把手教你使用MVVM

MVC、MVP简介 MVC、MVPMVVM都是在安卓开发中经常使用的模式,我们在认识MVVM之前先回顾一下MVC和MVP。...MVC View:xml布局 Model:数据层,负责数据交互存储和实体类定义 Controller:业务处理层 Android开发本身还是比较符合MVC架构的,但是Android中纯粹作为View的...MVP View:xml文件及对应的Activity或Fragment,负责界面展示和交互 Model:数据层,负责数据交互存储和实体类定义 Presenter:负责View层和Model层之间的逻辑处理...网络(Retrofit等)服务进行交互; 服务将json数据返回Retrofit等网络,再返回到Model层中,ViewModel在回调中收到返回的实体类对象; 因为xml实体类对象实现了双向绑定...虽然在现实生产中用Android MVVM模式开发还比较少,但是随着DataBinding 1.0的发布,相信在Android MVVM 这一领域会更多的人来尝试。

1.9K20
  • “终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

    二、Android开发中的架构 具体到Android开发中,开发架构就是描述 视图层、逻辑层、数据层 三者之间的关系和实施: 视图层:用户界面,即界面的展示、以及交互事件的响应。...我的Android开发之路完整地经过了 MVC、MVPMVVM,相信很多开发者和我一样都是这样一个过程,先来回顾下三者。...应用中的其他组件可以使用此存储监控对象的更改,而无需在它们之间创建明确且严格的依赖路径。...3.2.3 连接 ViewModel 存储区 我们在UserListViewModel 提供一个方法,用户Activity获取用户信息。...四、总结 本篇介绍了 架构模式的含义,回顾和比较了Android中的架构模式MVC、MVPMVVM,最好在 Jetpack架构组件 基础上 介绍了 MVVM 的详细实现方法、注意点,以及MVP的改造。

    2K20

    Android 应用架构演变

    Android 应用架构演变 原始架构 Android刚开始的时候没有第三方,基本方式就是AsyncTask 和Handler配合使用,简单直接没有过多分层设计 ?...能够实现数据源的数据交互。...Activity控制并不是完全分离的,即一部分View视图和Activity Controller控制是绑定在一起的,所以相对于Java所适用的MVC方案,在Android中仅仅起到部分优化效果,在...MVP是对MVC的改进,让Model和View完全解耦 优点 ModelView不存在直接关系 PresenterView、Model的交互使用接口定义交互操作进一步达到松耦合也可以通过接口更加方便地进行单元测试...优点 结构少容易理解每层的目的 缺点 刚推出还没被大面积使用 总结 原始架构 MVC MVP MVVM这四种架构方式对Android APP来说都是项目结构采用一种方式后基本架构就不会改变。

    1.3K20

    MVVM 进阶版:MVI 架构了解一下~

    前言 -- Android开发发展到今天已经相当成熟了,各种架构大家也都耳熟能详,如MVC,MVP,MVVM等,其中MVVM更是被官方推荐,成为Android开发中的显学。...,选择合适项目场景的架构 经典架构介绍 ------ MVC架构介绍 MVC是个古老的Android开发架构,随着MVPMVVM的流行已经逐渐退出历史舞台,我们在这里做一个简单的介绍,其架构图如下所示...模型层(Model):主要负责网络请求,数据处理,I/O的操作,即页面的数据来源 由于android中xml布局的功能性太弱,Activity实际上负责了View层Controller层两者的工作,...层 Model层:主要负责网络请求,数据处理等操作,这个没有什么变化 我们可以看到,MVP解决了MVC的两个问题,即Activity承担了两层职责View层Model层耦合的问题 但MVP架构同样有自己的问题...,MVP,MVVMMVI架构,目前MVVM是官方推荐的架构,但仍然有以下几个痛点 MVVMMVP的主要区别在于双向数据绑定,但由于很多人(比如我)并不喜欢使用DataBindg,其实并没有使用MVVM

    2K20

    正确认识 MVCMVPMVVM

    从数据的维度来说,可以细分为数据的定义、数据的存储、数据的获取。数据的定义其实就是定义数据结构,一般用实体类来定义,以方便在不同角色间传递数据。数据的存储和获取则可能有几种途径:数据、网络或缓存等。...为了从根本上解决这个问题,因此,很多 App 项目都改用 MVPMVVM。接下来,我们再来看看 MVPMVVM。...MVVM MVVM = Model-View-ViewModel, MVC、MVP 不同的就在于最后一个部件,换成了 ViewModel(VM)。...MVVM 的关系图如下: ? 可看出,MVVM 的关系图和 MVP 很相似,最大的不同在于 View 和 ViewModel 之间主要是通过数据绑定的方案来实现交互的。...MVP 之间的交互主要是通过接口实现的,其主要弊端就是需要编写大量接口。而 MVVM 则是通过数据绑定的方式实现交互,虽然其实现需要依赖具体的一些框架工具,但明显大大减少了开发者需要编写的代码量。

    2.7K33

    Android MVC、MVPMVVMMVP-databinding 架构单元示例

    如果页面比较单一,采用MVC也未尝不可; 如果需要稳定性高,解耦性强就可以选用MVP,使M层V层分离,结构更清晰; 如果想尝鲜(其实已经有段时间了),少写接口,高效,也可以使用MVVM; 阮一峰《MVC...控制(Controller):业务逻辑 模型(Model):数据保存 [来自MVC----MVC,MVPMVVM 的图示] 如Avtivity里的一个点击事件: /\*\* \* 将业务逻辑封装在...[来自MVP----MVC,MVPMVVM 的图示] 通过P层将Model层View层解耦,同时PV、PM可以相互通信。...MVVM MVVM 模式将 Presenter 改名为 ViewModel,基本上 MVP 模式完全一致。...in Android 阮一峰: MVC,MVPMVVM 的图示 Jensen: Android中的MVC和MVP(分析+实例) CSDN: 认清Android框架 MVC,MVPMVVM End

    1.2K40

    Android UI 架构演进:从 MVC 到 MVPMVVM、MVI

    MVC MVC 其实是 Android 默认的设计,MVC 里将代码分为三个部分: View: Layout XML 文件; Model: 负责管理业务数据逻辑,如网络请求、数据处理; Controller...MVVM MVVM 模式改动在于中间的 Presenter 改为 ViewModel,MVVM 同样将代码划分为三个部分: View: Activity 和 Layout XML 文件, MVP 中...View 的概念相同; Model: 负责管理业务数据逻辑,如网络请求、数据处理, MVP 中 Model 的概念相同; ViewModel: 存储视图状态,负责处理表现逻辑,并将数据设置给可观察数据容器...但 MVVM 本身也存在一些缺点: 多数据流: View ViewModel 的交互分散,缺少唯一修改源,不易于追踪; LiveData 膨胀: 复杂的页面需要定义多个 MutableLiveData...MVPMVVM 和 MVI 的对比 MVVMMVP 的思想是相同的,最本质的概念就是 Activity 里做的事情太多了,所以要把 Activity 中 UI 无关的部分抽离出来,交给别人做。

    1.3K10

    (新瓶旧酒)谷歌官方MVP项目学习--浅入源码

    todo-mvp示例使用以下依赖关系: 常见的Android支持 - com.android.support。*命名空间中的软件包提供向后兼容性和其他功能。...Guava - 谷歌的一组核心,通常用于Android应用程序。 设计app 该应用程序由四个UI页面组成: Tasks - 用于管理任务列表。...APIProvider提供了一些方法,使Activity和Fragment能够很容易的实现REST API的数据交互。...按照同样的方式,CacheProvider 所包含的方法负责从SharedPreferences和SQLite数据检索和存储数据。同样使用回调的方式,将结果传回Activity。...MVP架构 ? MVP 是如何建立起关系来的? 首先,M 只在 P 中使用, V 无关,因此 M 只要传入 P 中即可。 P V 之间的关系是这样的:V 和 P 互相保存对方的实例。

    78310

    浅谈开发中的MVVM模式及MVP和MVC的区别

    我记得前段时间分享了一篇文章《 浅谈Andorid开发中的MVP模式》(点击可跳转),反响不错,为了进一步介绍MVVM模式,还提前分享了实现AndroidMVVM模式的一个关键技术的文章《Android...作为一种新的模式,MVPMVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过 Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter...MVVMMVP的关系 而 MVVM 模式将 Presenter 改名为 ViewModel,基本上 MVP 模式完全一致。...MVP架构: View: 对应于Activity,负责View的绘制以及用户交互 Model: 依然是业务逻辑和实体模型 Presenter: 负责完成View于Model间的交互 View不直接Model...交互,而是通过Presenter交互Model间接交互

    1.9K100

    如何构建Android MVVM 应用框架

    接下来,我们先来看看什么是MVVM,然后再一步一步来设计整个MVVM框架。 MVC、MVPMVVM 首先,我们先大致了解下Android开发中常见的模式。 MVC View:XML布局文件。...MVP View: 对应于Activity和XML,负责View的绘制以及用户的交互。 Model: 依然是实体模型。 Presenter: 负责完成ViewModel间的交互和业务逻辑。...但MVP也存在一些弊端: Presenter(以下简称P)层View(以下简称V)层是通过接口进行交互的,接口粒度不好控制。...MVVM View: 对应于Activity和XML,负责View的绘制以及用户交互。 Model: 实体模型。 ViewModel: 负责完成ViewModel间的交互,负责业务逻辑。...MVVM Light Toolkit只是一个工具,主要目的是更快捷方便地构建Android MVVM应用程序,在里面添加了一些控件额外属性和做了一些事件的封装,同时引进了全局消息通道Messenger

    4.5K60

    Android应用架构的未来:深入理解MVI模式及其优势

    在MVI中,视图是无状态的,它仅仅是一个渲染,负责根据模型的状态来更新界面。 Intent Intent代表用户的意图或动作。它是用户应用程序交互的途径,例如点击按钮、输入文本等。...将副作用(例如网络请求、数据操作)视图逻辑分离,以便更好地进行测试和维护。 考虑使用 Kotlin 的协程或 RxJava 等来处理异步操作,以确保应用程序的流畅性和响应性。...MVI、MVVMMVP的对比 MVVM(Model-View-ViewModel)和MVP(Model-View-Presenter)是另外两种常见的架构模式,它们MVI架构有着不同的特点和应用场景...响应式编程:通过使用协程RxJava等响应式编程,简化了数据流的管理和处理。 不可变性:MVI中的状态是不可变的,任何状态的更改都会产生一个新的状态,这样可以确保状态的一致性和可预测性。...适用场景: MVI:适用于复杂交互逻辑和对数据流管理要求严格的应用。 MVVM:适用于数据驱动UI和跨平台开发。 MVP:适用于传统项目和需要进行大量测试的项目。

    87310

    MVC、MVPMVVM三剑客

    MVC、MVPMVVM 首先让我们来了解下Android中常见的开发模式。 MVC View:XML布局文件。 Model:实体模型(数据的获取、存储、数据状态变化)。...MVP Model: 依然是实体模型。 View: 对应于Activity和XML,负责View的绘制以及用户的交互。 Presenter: 负责完成ViewModel间的交互和业务逻辑。 ?...MVVM Model: 实体模型。 View: 对应于Activity和XML,负责View的绘制以及用户交互。 ViewModel: 负责完成ViewModel间的交互,负责业务逻辑。...其实MVVM就是MVP的升级版,MVVM的目标和思想MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed...Model model层和mvp、mvc中的model没有什么区别,定义一个实体类进行数据的获取和存储而已 最后:Model只是一个实体类 敲黑板了,敲黑板了。

    1.1K111

    Android应用架构前世今生

    前言 Android的开发生态系统发展迅速,在开发Android的几年的时间里,用来构建Android应用的架构技术一直在不断进化。随着项目的不断更新迭代,应用的架构也有不一样的变化。...开发效果高,代码层级也简单易懂 缺点:当业务复杂时,Activity非常臃肿,不便于维护及测试 mvp mvp这是目前我们项目中主要采用的应用架构方式,MVP从更早的MVC框架演变过来,MVC有一定的相似性...在MVP模式里通常包含3个要素(加上View interface是4个): View:负责绘制UI元素、用户进行交互(在Android中体现为Activity) Model:负责存储、检索、操纵数据...(有时也实现一个Model interface用来降低耦合) Presenter:作为ViewModel交互的中间纽带,处理用户交互的负责逻辑。...mvvm MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data

    61060

    MVC、MVPMVVM的理解使用

    前言 对于MVC、MVPMVVM,这都是Android开发的一种架构,随着日积月累的开发,很对人对这几种模式是再熟悉不过了。...---- MVC MVC全名 Model View Controller 模型(model)-视图(view)-控制(controller) M是指业务模型 V是指用户界面 C则是控制...可以看到在View中我们可以直接Moduel赋值从而,View里会包含Model信息,这样存在耦合性就比较大,我们希望的是我们View和Controller交互。...MVPMVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,...MVVM模式包含三个部分 Model代表基本的业务逻辑 View显示内容 ViewModel将前面两者联系在一起 MVVM模式中,一个ViewModel和一个View匹配,它没有MVP中的IView

    64510

    Android应用架构前世今生

    前言 Android的开发生态系统发展迅速,在开发Android的几年的时间里,用来构建Android应用的架构技术一直在不断进化。随着项目的不断更新迭代,应用的架构也有不一样的变化。...开发效果高,代码层级也简单易懂 缺点: 当业务复杂时,Activity非常臃肿,不便于维护及测试 mvp mvp这是目前我们项目中主要采用的应用架构方式,MVP从更早的MVC框架演变过来,MVC有一定的相似性...View:负责绘制UI元素、用户进行交互(在Android中体现为Activity) Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合) Presenter...:作为ViewModel交互的中间纽带,处理用户交互的负责逻辑。...mvvm MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data

    90570

    三大架构的比较

    MVC 模型层(Model) 负责存储、检索、操纵来自数据或者网络的数据 视图层(View) 用户界面,一般采用XML文件进行界面的描述 控制层(Controller) 业务逻辑处理 1....MVP 模型层(Model) 负责存储、检索、操纵来自数据或者网络的数据。 视图层(View) 用户界面,一般采用XML文件进行界面的描述。...逻辑处理层(Presenter) 作为ViewModel交互的中间纽带,处理用户交互的负责逻辑。 1....MVVM 模型层(Model) 负责存储、检索、操纵来自数据或者网络的数据 视图层(View) 用户界面,一般采用XML文件进行界面的描述 视图-模型层(ViewModel) 负责View和Model...可参考一套Android App基础框架 架构设计:从MVC、MVPMVVM 网络访问:支持REST、HTTPS及SPDY的Retrofit+Okhttp 响应式编程:RxJava/RxAndroid

    1.2K100

    项目架构三问—腾讯真题

    今天就来谈谈吧: 介绍一下你们项目的架构 MVP,MVVM,MVC 区别 说说你理解的MVVM 介绍一下你们之前做的项目的架构 这个问题大家就真实回答就好,重点是要说完后提出对自己项目架构的认同或不认同的观点...MVP,MVVM,MVC 区别 MVC 架构介绍 Model:数据模型,比如我们从数据或者网络获取数据View:视图,也就是我们的xml布局文件Controller:控制,也就是我们的Activity...其实Android这种并称不上传统的MVC结构,因为Activity又可以叫View层又可以叫Controller层,所以我觉得这种Android默认的开发结构,其实称不上什么MVC项目架构,因为他本身就是...优缺点 这种的优点就是确实大大减少了Activity的负担,让Activity主要承担一个更新View的工作,然后把跟Model交互的工作转移给了Presenter,从而由Presenter方来控制和交互...优缺点 优点就是官方大力支持,所以也更新了很多相关,让MVVM架构更强更好用,而且双向绑定的特点可以让我们省去很多View和Model的交互。也基本解决了上面两个架构的问题。

    53810
    领券