当前位置:首页 » 安卓系统 » mvp框架android

mvp框架android

发布时间: 2022-08-17 16:25:51

㈠ 如何实现自己的Android MVP框架

前言MVP作为一种MVC的演化版本在Android开发中受到了越来越多的关注,但在项目开发中选择一种这样的软件设计模式需保持慎重心态,一旦确定使用MVP作为你App的开发模式那么你就最好坚持做下去,如果在使用MVP模式开发过程中发现问题而且坑越来越大,这时你想用MVC等来重新设计的话基本上就等于推倒重来了。要知道在Android上MVP在现在为止并没有统一的标准或者框架,不像SSH这三个成熟稳重强而有力的三剑客支持推动着javaEE的开发,所以在运用MVP时一定要做好自己的理解,并且尽量预知自己App各模块的需求(客户说改改改,我们就改改改:-()以便提前做好充分的设计工作。当然MVP既然能出现那么必然有它的优点的,不然谁会理会这个冒出来的东西,下面就对Android中MVP做一些阐述。MVP简介相信大家对MVC都是比较熟悉了:M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,也是作为用户界面(用户层)的实现模式,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色,起着控制各业务流程的作用。而MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控View与Model之间的间接交互,MVP的结构图如下所示,对于这个图理解即可而不必限于其中的条条框框,毕竟在不同的场景下多少会有些出入的。在Android中很重要的一点就是对UI的操作基本上需要异步进行也就是在MainThread中才能操作UI,所以对View与Model的切断分离是合理的。此外Presenter与View、Model的交互使用接口定义交互操作可以进一步达到松耦合也可以通过接口更加方便地进行单元测试。MVP结构图MVP之ModelModel是用户界面需要显示数据的抽象,也可以理解为从业务数据(结果)那里到用户界面的抽象(Businessrule,dataaccess,modelclasses)。本文Demo为了简单处理就直接把业务放到了对应的Model之中。MVP之View视图这一层体现的很轻薄,负责显示数据、提供友好界面跟用户交互就行。MVP下Activity和Fragment体现在了这一层,Activity一般也就做加载UI视图、设置监听再交由Presenter处理的一些工作,所以也就需要持有相应Presenter的引用。例如,Activity上滚动列表时隐藏或者显示Acionbar(Toolbar),这样的UI逻辑时也应该在这一层。另外在View上输入的数据做一些判断时,例如,EditText的输入数据,假如是简单的非空判断则可以作为View层的逻辑,而当需要对EditText的数据进行更复杂的比较时,如从数据库获取本地数据进行判断时明显需要经过Model层才能返回了,所以这些细节需要自己掂量。MVP之PresenterPresenter这一层处理着程序各种逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理逻辑交由业务层做具体的业务操作,然后将得到的Model给View显示。演示demo动手写起代码来才有更好的感觉。demo很简单,还是上个图更直观,输入城市的代号,点击按钮获取城市的天气信息然后显示出来,网络操作使用Volley框架,解析用Gson,其它的就手写了。整个项目的包设计如下:包结构项目效果预览包图中明显的三层:Model包、Presenter包、UI包,其中,三者都实现各自的结构,Model为WeatherModel、Presenter为WeatherPresenter、View为Weather,那么具体实现类就是impl包里的了,View层的即为Activity。此外的app和util包无关紧要可以不看。可以看到采用MVP设计后项目明显多了很多东西,这也是不可避免的,使用原始方法可以使项目开起来简单些但是以后还有维护呢、测试呢、加功能呢、。。。entity里的实体属性基本上对应json里的这些属性了,代码不贴了View里面的接口:publicinterfaceWeatherView{voidshowLoading();voidhideLoading();voidshowError();voidsetWeatherInfo(Weatherweather);}WeatherPresenter的接口:{/***获取天气的逻辑*/voidgetWeather(StringcityNO);}WeatherModel接口:publicinterfaceWeatherModel{voidloadWeather(StringcityNO,OnWeatherListenerlistener);}prestener里面还有个OnWeatherListener,其在Presenter层实现,给Model层回调,更改View层的状态,确保Model层不直接操作View层。如果没有这一接口在WeatherPresenterImpl实现的话,WeatherPresenterImpl只有View和Model的引用那么Model怎么把结果告诉View呢?当然这只是一种解决方案,在实际项目中可以使用Dagger、EventBus、Otto等第三方框架结合进来达到更加松耦合的设计。{/***成功时回调**@paramweather*/voidonSuccess(Weatherweather);/***失败时回调,简单处理,没做什么*/voidonError();}所以demo的代码流程:Activity做了一些UI初始化的东西并需要实例化对应WeatherPresenter的引用和实现WeatherView的接口,监听界面动作,Go按钮按下后即接收到查询天气的事件,在onClick里接收到即通过WeatherPresenter的引用把它交给WeatherPresenter处理。WeatherPresenter接收到了查询天气的逻辑就知道要查询天气了,然后把查询天气的具体业务实现交给WeatherModel去实现同时把WeatherListener即WeatherPresenter自己传给WeatherModel。WeatherModel进行查询天气业务后即把结果通过WeatherListener回调通知WeatherPresenter,WeatherPresenter再把结果返回给View层的Activity,最后Activity显示结果。就这样,拍砖之处请拍。End采用哪种软件设计模式都是为了达到如下目的,找到合适的加以运用就是最好的:易于维护易于测试松耦合度复用性高健壮稳定------------------------------------------------------------------------------------以上内容均参考互联网,希望以上知识对您有所帮助,

㈡ 安卓baseactivity怎么封装mvp

实现Android MVP框架一个经典的 Android MVC 框架项目的代码结构 MVP减负activity ,承担了 view 层和 controller 层的工作 View 层的 ActivityActivity 里包含: View 层的对外接口 MainView, P层 Presenter对外接口 MainView 文件 P层代码 文件 DataManager.java TaskDataSource.java TaskDataSourceImpl.java TaskDataSourceTestImpl.java Android 版方案通过新建子线程进行IO读写获取数据 以主线程的 Looper 将结果通过传回主线程进行渲染和展示。

㈢ 如何实现自己的Android MVP框架

前言

MVP作为一种MVC的演化版本在Android开发中受到了越来越多的关注,但在项目开发中选择一种这样的软件设计模式需保持慎重心态,一旦确定使用MVP作为你App的开发模式那么你就最好坚持做下去,如果在使用MVP模式开发过程中发现问题而且坑越来越大,这时你想用MVC等来重新设计的话基本上就等于推倒重来了。要知道在Android上MVP在现在为止并没有统一的标准或者框架,不像SSH这三个成熟稳重强而有力的三剑客支持推动着Java EE的开发,所以在运用MVP时一定要做好自己的理解,并且尽量预知自己App各模块的需求(客户说改改改,我们就改改改 :-( )以便提前做好充分的设计工作。当然MVP既然能出现那么必然有它的优点的,不然谁会理会这个冒出来的东西,下面就对Android中MVP做一些阐述。

MVP简介

相信大家对MVC都是比较熟悉了:M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,也是作为用户界面(用户层)的实现模式,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色,起着控制各业务流程的作用。而MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控View与Model之间的间接交互,MVP的结构图如下所示,对于这个图理解即可而不必限于其中的条条框框,毕竟在不同的场景下多少会有些出入的。在Android中很重要的一点就是对UI的操作基本上需要异步进行也就是在MainThread中才能操作UI,所以对View与Model的切断分离是合理的。此外Presenter与View、Model的交互使用接口定义交互操作可以进一步达到松耦合也可以通过接口更加方便地进行单元测试。

项目效果预览
包图中明显的三层:Model包、Presenter包、UI包,其中,三者都实现各自的结构,Model为WeatherModel、Presenter为WeatherPresenter、View为Weather,那么具体实现类就是impl包里的了,View层的即为Activity。此外的app和util包无关紧要可以不看。可以看到采用MVP设计后项目明显多了很多东西,这也是不可避免的,使用原始方法可以使项目开起来简单些但是以后还有维护呢、测试呢、加功能呢、。。。
entity里的实体属性基本上对应json里的这些属性了,代码不贴了

View里面的接口:

public interface WeatherView {
void showLoading();
void hideLoading();
void showError();
void setWeatherInfo(Weather weather);
}


WeatherPresenter的接口:

public interface WeatherPresenter {
/**
* 获取天气的逻辑
*/
void getWeather(String cityNO);
}


WeatherModel接口:

public interface WeatherModel {
void loadWeather(String cityNO, OnWeatherListener listener);
}


prestener里面还有个OnWeatherListener,其在Presenter层实现,给Model层回调,更改View层的状态,确保Model层不直接操作View层。如果没有这一接口在WeatherPresenterImpl实现的话,WeatherPresenterImpl只有View和Model的引用那么Model怎么把结果告诉View呢?当然这只是一种解决方案,在实际项目中可以使用Dagger、EventBus、Otto等第三方框架结合进来达到更加松耦合的设计。

public interface OnWeatherListener {
/**
* 成功时回调
*
* @param weather
*/
void onSuccess(Weather weather);
/**
* 失败时回调,简单处理,没做什么
*/
void onError();
}


所以demo的代码流程:Activity做了一些UI初始化的东西并需要实例化对应WeatherPresenter的引用和实现WeatherView的接口,监听界面动作,Go按钮按下后即接收到查询天气的事件,在onClick里接收到即通过WeatherPresenter的引用把它交给WeatherPresenter处理。WeatherPresenter接收到了查询天气的逻辑就知道要查询天气了,然后把查询天气的具体业务实现交给WeatherModel去实现同时把WeatherListener即WeatherPresenter自己传给WeatherModel。WeatherModel进行查询天气业务后即把结果通过WeatherListener回调通知WeatherPresenter,WeatherPresenter再把结果返回给View层的Activity,最后Activity显示结果。就这样,拍砖之处请拍。

End

采用哪种软件设计模式都是为了达到如下目的,找到合适的加以运用就是最好的:

易于维护

易于测试

松耦合度

复用性高

健壮稳定

------------------------------------------------------------------------------------

以上内容均参考互联网,希望以上知识对您有所帮助,

㈣ Android MVP与MVC的区别和理解

MVP架构:
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。
Presenter与View的交互是通过接口来进行的。
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。
MVC架构:
View可以与Model直接交互。
Controller是基于行为的,并且可以被多个View共享。
可以负责决定显示哪个View。

㈤ android mvvm和mvp哪个好

没有那个好那个不好一说,大项目需要用到框架做以后的维护升级,小项目没必要去强套什么框架,反而会变得麻烦。

㈥ android mvc和mvp的区别

MVC与MVP架构特点与区别-android
http://blog.csdn.net/shareus/article/details/51481308

㈦ Android MVP架构中的Presentation层应该怎么设计

对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等。本篇博文仅是为了做下记录,提出一些自己的看法,和帮助大家如何针对一个Activity页面去编写针对MVP风格的代码。
对于MVP,我的内心有一个问题:
为何这个模式出来后,就能被广大的Android的程序员接受呢?
问了些程序员,他们对于MVP的普遍的认识是:“代码很清晰,不过增加了很多类”。我在第一次看到MVP的时候,看了一个demo,看完以后觉得非常nice(但是回过头来,自己想个例子写,就头疼写不出来,当然这在后文会说)。nice的原因还是因为,这个模式的确让代码的清晰度有了很大的提升。
那么,提升一般都是对比出来的,回顾下,没有应用MVP的代码结构。很多人说明显是MVC么:
View:对应于布局文件
Model:业务逻辑和实体模型
Controllor:对应于Activity
看起来的确像那么回事,但是细细的想想这个View对应于布局文件,其实能做的事情特别少,实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,造成了Activity既像View又像Controller(当然了Data-Binder的出现,可能会让View更像View吧)。这可能也就是为何,在该文中有一句这样的话:
Most of the modern Android applications just use View-Model architecture,everything is connected with Activity.
而当将架构改为MVP以后,Presenter的出现,将Actvity视为View层,Presenter负责完成View层与Model层的交互。现在是这样的:
View 对应于Activity,负责View的绘制以及与用户交互
Model 依然是业务逻辑和实体模型
Presenter 负责完成View于Model间的交互
ok,先简单了解下,文中会有例子到时候可以直观的感受下。

㈧ 如何一步一步实现Android的MVP框架

实现Android MVP框架

一个经典的 Android MVC 框架项目的代码结构

㈨ android 怎么使用mvvm框架

MVC、MVP、MVVM
首先,我们先大致了解下Android开发中常见的模式。
MVC
View:XML布局文件。
Model:实体模型(数据的获取、存储、数据状态变化)。
Controllor:对应于Activity,处理数据、业务和UI。
从上面这个结构来看,Android本身的设计还是符合MVC架构的,但是Android中纯粹作为View的XML视图功能太弱,我们大量处理View的逻辑只能写在Activity中,这样Activity就充当了View和Controller两个角色,直接导致Activity中的代码大爆炸。相信大多数Android开发者都遇到过一个Acitivty数以千行的代码情况吧!所以,更贴切的说法是,这个MVC结构最终其实只是一个Model-View(Activity:View&Controller)的结构。
MVP
View:对应于Activity和XML,负责View的绘制以及与用户的交互。
Model:依然是实体模型。
Presenter:负责完成View与Model间的交互和业务逻辑。
前面我们说,Activity充当了View和Controller两个角色,MVP就能很好地解决这个问题,其核心理念是通过一个抽象的View接口(不是真正的View层)将Presenter与真正的View层进行解耦。Persenter持有该View接口,对该接口进行操作,而不是直接操作View层。这样就可以把视图操作和业务逻辑解耦,从而让Activity成为真正的View层。
但MVP也存在一些弊端:
Presenter(以下简称P)层与View(以下简称V)层是通过接口进行交互的,接口粒度不好控制。粒度太小,就会存在大量接口的情况,使代码太过碎版化;粒度太大,解耦效果不好。同时对于UI的输入和数据的变化,需要手动调用V层或者P层相关的接口,相对来说缺乏自动性、监听性。如果数据的变化能自动响应到UI、UI的输入能自动更新到数据,那该多好!
MVP是以UI为驱动的模型,更新UI都需要保证能获取到控件的引用,同时更新UI的时候要考虑当前是否是UI线程,也要考虑Activity的生命周期(是否已经销毁等)。
MVP是以UI和事件为驱动的传统模型,数据都是被动地通过UI控件做展示,但是由于数据的时变性,我们更希望数据能转被动为主动,希望数据能更有活性,由数据来驱动UI。
V层与P层还是有一定的耦合度。一旦V层某个UI元素更改,那么对应的接口就必须得改,数据如何映射到UI上、事件监听接口这些都需要转变,牵一发而动全身。如果这一层也能解耦就更好了。
复杂的业务同时也可能会导致P层太大,代码臃肿的问题依然不能解决。
MVVM
View:对应于Activity和XML,负责View的绘制以及与用户交互。
Model:实体模型。
ViewModel:负责完成View与Model间的交互,负责业务逻辑。
MVVM的目标和思想与MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一个更加灵活高效的架构。
数据驱动
在常规的开发模式中,数据变化需要更新UI的时候,需要先获取UI控件的引用,然后再更新UI。获取用户的输入和操作也需要通过UI控件的引用。在MVVM中,这些都是通过数据驱动来自动完成的,数据变化后会自动更新UI,UI的改变也能自动反馈到数据层,数据成为主导因素。这样MVVM层在业务逻辑处理中只要关心数据,不需要直接和UI打交道,在业务处理过程中简单方便很多。
低耦合度
MVVM模式中,数据是独立于UI的。
数据和业务逻辑处于一个独立的ViewModel中,ViewModel只需要关注数据和业务逻辑,不需要和UI或者控件打交道。UI想怎么处理数据都由UI自己决定,ViewModel不涉及任何和UI相关的事,也不持有UI控件的引用。即便是控件改变了(比如:TextView换成EditText),ViewModel也几乎不需要更改任何代码。它非常完美的解耦了View层和ViewModel,解决了上面我们所说的MVP的痛点。
更新UI
在MVVM中,数据发生变化后,我们在工作线程直接修改(在数据是线程安全的情况下)ViewModel的数据即可,不用再考虑要切到主线程更新UI了,这些事情相关框架都帮我们做了。
团队协作
MVVM的分工是非常明显的,由于View和ViewModel之间是松散耦合的:一个是处理业务和数据、一个是专门的UI处理。所以,完全由两个人分工来做,一个做UI(XML和Activity)一个写ViewModel,效率更高。
可复用性
一个ViewModel可以复用到多个View中。同样的一份数据,可以提供给不同的UI去做展示。对于版本迭代中频繁的UI改动,更新或新增一套View即可。如果想在UI上做A/B Testing,那MVVM是你不二选择。
单元测试
有些同学一看到单元测试,可能脑袋都大。是啊,写成一团浆糊的代码怎么可能做单元测试?如果你们以代码太烂无法写单元测试而逃避,那可真是不好的消息了。这时候,你需要MVVM来拯救。
我们前面说过了,ViewModel层做的事是数据处理和业务逻辑,View层中关注的是UI,两者完全没有依赖。不管是UI的单元测试还是业务逻辑的单元测试,都是低耦合的。在MVVM中数据是直接绑定到UI控件上的(部分数据是可以直接反映出UI上的内容),那么我们就可以直接通过修改绑定的数据源来间接做一些Android UI上的测试。
通过上面的简述以及模式的对比,我们可以发现MVVM的优势还是非常明显的。虽然目前Android开发中可能真正在使用MVVM的很少,但是值得我们去做一些探讨和调研。
如何构建MVVM应用框架
如何分工
构建MVVM框架首先要具体了解各个模块的分工。接下来我们来讲解View、ViewModel、Model它们各自的职责所在。
View
View层做的就是和UI相关的工作,我们只在XML、Activity和Fragment写View层的代码,View层不做和业务相关的事,也就是我们在Activity不写业务逻辑和业务数据相关的代码,更新UI通过数据绑定实现,尽量在ViewModel里面做(更新绑定的数据源即可),Activity要做的事就是初始化一些控件(如控件的颜色,添加RecyclerView的分割线),View层可以提供更新UI的接口(但是我们更倾向所有的UI元素都是通过数据来驱动更改UI),View层可以处理事件(但是我们更希望UI事件通过Command来绑定)。 简单地说:View层不做任何业务逻辑、不涉及操作数据、不处理数据,UI和数据严格的分开。
ViewModel
ViewModel层做的事情刚好和View层相反,ViewModel只做和业务逻辑和业务数据相关的事,不做任何和UI相关的事情,ViewModel 层不会持有任何控件的引用,更不会在ViewModel中通过UI控件的引用去做更新UI的事情。ViewModel就是专注于业务的逻辑处理,做的事情也都只是对数据的操作(这些数据绑定在相应的控件上会自动去更改UI)。同时DataBinding框架已经支持双向绑定,让我们可以通过双向绑定获取View层反馈给ViewModel层的数据,并对这些数据上进行操作。关于对UI控件事件的处理,我们也希望能把这些事件处理绑定到控件上,并把这些事件的处理统一化,为此我们通过BindingAdapter对一些常用的事件做了封装,把一个个事件封装成一个个Command,对于每个事件我们用一个ReplyCommand 去处理就行了,ReplyCommand 会把你可能需要的数据带给你,这使得我们在Vie,具体见 MVVM Light Toolkit 使用指南的 Command 部分 。再强调一遍:ViewModel 不做和UI相关的事。

㈩ Android MVP 开发模式有哪些优缺点

android MVP开发模式的优点

1)View和Model之间的耦合度降低,使其更关注自身业务逻辑,结构清晰,维护方便;

2)便于单元测试;

3)代码复用率提高;

4)代码框架更适用于快速迭代开发;

android MVP开发模式的缺点

任何开发模式都是有利也有弊的,毕竟世间完美的事物还是少见的。上面提到了MVP模式的有点,那就不得不说其还存在的缺点,或者说不足更准确吧。

MVP模式的不足,主要表现在每个view都有presenter ,类相对比较多。

热点内容
java面试复习 发布:2024-05-07 06:01:15 浏览:658
suftp 发布:2024-05-07 06:00:40 浏览:879
编程的tr 发布:2024-05-07 05:37:25 浏览:423
苹果4s的数据怎么备份到安卓上 发布:2024-05-07 05:37:15 浏览:819
安卓怎么注册电邮 发布:2024-05-07 05:23:49 浏览:714
怎么看清被涂鸦的内容安卓手机 发布:2024-05-07 05:16:52 浏览:702
配置业务分类时主要考虑哪些原因 发布:2024-05-07 05:12:40 浏览:186
外网如何访问内网ip 发布:2024-05-07 05:12:30 浏览:814
网易版有拔刀剑的服务器叫什么 发布:2024-05-07 04:56:35 浏览:752
中国好源码 发布:2024-05-07 04:56:29 浏览:872