MVP 模式在 Android 中的使用

什么是MVP

作为码农你应该知道MVC(Model View Control)吧,如果不知道,请自行补脑。MVP(Model View Presenter)是MVC衍生而来的,MVP并不是一个新玩意,很早以前就由某软公司提出,近年来在Android应用开发中越来越多的被提及,越来越重要了。本文简单解介绍MVP的概念、为啥要使用MVP和在Android中如何使用,最后介绍一个Android使用MVP的例子。

概念

MVP,即 Model View Presenter,包含逻辑、视图、presenter(作为视图和逻辑的中间层,暂时找不到一个合适的词来翻译)三个部分。MVP要求显示层和逻辑层分离,View 发生变化时逻辑层(Model)不用改变。

为啥使用MVP

界面需求千变万化,而产品逻辑相对的稳定。这是Android甚至其它移动应用的基本现象,所以逻辑和视图的解藕变得很重要。之前有人问过我MVC在Android中的应用,Activity在是MVC中的哪一个?其实回答这个问题有些尴尬的地方,Activity在Android系统中本来是用来呈现界面的一个组件,而在Android应用开发中又无不兼负着界面跳转和数据访问的职责(很多数据访问逻辑的确是在Activity中发生的),Activity到底是View还是Control还是二者兼具?不好回答。而MVP却很好的解释Android视图和逻辑的解藕。

如何在Android中使用?

  • presenter

处于 View 和 Model 之间,控制View的行为同时调度业务逻辑层的行为。这样View和Model不用直接交互。在Android中我们可以建一个XxxPresenter类来负责这层。

  • View

毫无疑问,在Android中Activity是用来承载视图的,但是我们希望图的职责变得更加纯净,只负责显示视图,我们不希望Activity和model有直接的联系,我门可以定义一个View接口,在这个View中定义视图行为的抽象,让具体的Activity来实现,所以这个Activity要实现这个View,通常取名为XxxView。然后Presenter持有这个View的引用从而能调用View的行为。

  • Model

只负责应用的业务逻辑,例如数据请求或数据处理等,我们可以建一个XxxManager类来负责这层。

一个例子:MVP Demo
说了那么多,其实最重要的还是看Demo,不然都很虚,例子是学习新东西的最好方式。

例子源码地址:https://github.com/liuguangli/androidmvp

结尾

使用MVC模式来分离Android应用的界面和业务逻辑不是一件容易的事,MVP在Android应用解藕上却很容易解释。无论使用什么样的模式或方法构建应用,最终的目的都是为了提高代码的可读性、可维护性,冗长难懂的代码可能会让计算机编译执行多耗几毫秒,但是最要命的是解决一个小bug却花上几个小时甚至几天去理清代码来解决。作为开发者我门大部分时间还是耗费在调试、找bug上,而不是编码,至于代码设计,值得花时间去思考。

参考:http://antonioleiva.com/mvp-android/

时间: 2024-10-03 14:54:57

MVP 模式在 Android 中的使用的相关文章

详解MVP模式在Android开发中的应用_Android

一.MVP介绍  随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包含4个要素:  (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:需要View实现的接口,Vi

MVP模式在Android项目中的使用

  以前在写项目的时候,没有过多考虑架构模式的问题,因为之前一直做J2EE开发,而J2EE都是采用MVC模式进行开发的,所以在搭建公司项目的时候,也 是使用类似MVC的架构(严格来讲,之前的项目还算不上MVC模式,只是简单将网络请求与界面分离,然后通过Handle通知更新界面).这种写法,在后 面随着项目越来越大,Activty或者Fragment中代码也会越来越多,导致项目的维护变的越来越复杂.所以需要另外一种架构模式来解决这个问题, 在网上浏览了一圈,发现适合Android开发的架构模式非M

详解MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包含4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:需要View实现的接口,View

界面-winform中使用mvp模式

问题描述 winform中使用mvp模式 如题,现在在网络上找到的文章99%都是差不多的,有原创的但都解决不了我的问题. 在一个界面中除了textbox的text之外,如果还要对这个textbox的大小和位置做修改 的话是不是又要再在接口里面写一个位置和大小的get,set,在界面中再实现一次,如果除了大小,位置之外,以后还有各种属性的设置,这样不就很麻烦,还有如果一个界面有10个textbox,都需要做这样的设置(值不一样),那么不就很长繁琐.跪求大神解答小弟这小小的问题. 解决方案 你可以在

Android Builder模式在开发中的应用

最近在学习图片加载框架Glide的时候,被他精简的写法震惊了.一句话,就可以搞定. Glide.with(mContext) .load(url) .centerCrop() .placeholder(R.drawable.default_img) .crossFade() .into(mImageView); 同时在年初的时候,学习RXJava的时候,用链式编程很优雅. Observable .just( "1" , "2" ) .subscribeOn(Sche

Android MVP模式ListView中嵌入checkBox的使用方法_Android

MVP模式 ListView中嵌入checkBox的使用 本文写的是一个小demo,如何在ListView中嵌入checkBox配合使用,本篇文章与前面的嵌入Button类似,同样的采用MVP模式的写代码,本次案例中会有几个小细节,我将会在案例中介绍. 程序基本框架如下: View层: MainActivity.java public class MainActivity extends AppCompatActivity implements ViewInter<MyBean>{ //Lis

Android中mvp模式使用实例详解

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller. 在MVC里,View是可以直接访问

Android MVP模式ListView中嵌入checkBox的使用方法

MVP模式 ListView中嵌入checkBox的使用 本文写的是一个小demo,如何在ListView中嵌入checkBox配合使用,本篇文章与前面的嵌入Button类似,同样的采用MVP模式的写代码,本次案例中会有几个小细节,我将会在案例中介绍. 程序基本框架如下: View层: MainActivity.java public class MainActivity extends AppCompatActivity implements ViewInter<MyBean>{ //Lis

按钮-MVP模式中 VIEW与VIEW能直接通行吗

问题描述 MVP模式中 VIEW与VIEW能直接通行吗 我想在项目中 在一个窗口中点击一个按钮另一个窗口需要做一些按钮禁用,我采用的是MVP模式,每一个窗口对应一个PRESENTER,我想知道窗口间的通信时VIEW与VIEW直接通信,还是通过对应的PRESENTER去通信? PRESENTER和PRESENTER之间又是如何通信的. 解决方案 View与View间可以直接通信,Presenter对于View而言最终只是获取加工数据的一个接口.关于MVP请参看http://blog.csdn.ne