android mvp 利弊,android mvp模式有什么弊端 - 什么是android mvp模式,android mvp模式有什么弊端...
android mvp模式有什么弊端
才开始学习使用MVP时,看到大家说了很多MVP的优点,代码复用,条理清晰等等。不过我改下来发现,MVP在我看来,最大的优点还是代码解耦,逻辑清晰,至于代码复用,暂时没有感觉很好用,除非是界面和逻辑基本一样的,不然想要复用,其实不太现实。
MVP的优点很明显,缺点其实也很明显,明显项目会多出许多类,增加了项目的复杂程度,而且像某些逻辑及其简单,事件较少的界面,使用MVP实际上反而是累赘,明明用MVC也就几十行代码的事,改成MVP多了好多个类,反而感觉不划算,改需求时又要翻阅好多个类。因此,我建议大家,如果你的某个界面极其简单,其实就不要用MVP了,MVP是逻辑越复杂,优势越明显,逻辑简单时,反而不如MVC好用,希望大家不要为了用MVP而用MVP。
下面来谈谈文章主题,MVP的优化问题,最开始采用网上大家的写法,发现代码的复用性不好,有些逻辑类似的代码,基本上每个presenter 和model都要重新写,于是想到使用Base类的方法,把某些共有的方法抽离以达到代码的复用性,类似于BaseActivity。
举个例子比如网络请求,在MVC中通常是把网络请求封装在BaseActivity中,不过既然是MVP,网络请求自然应该封装在Model里面啦
public abstract class BaseActivityModel implements IPublicModel {
//网络连接模式,当一个页面含有多个网络请求时,通过传入不同的模式,选择相应的加载参数
public static final int MODE_ONE=1;
public static final int MODE_TWO=2;
public static final int MODE_THREE=3;
//网络连接工具接口类
protected InternetConnect mConnect;
/**
* @param mode 请求模式
* @param intent 上个页面传递过来的intent
* @param i 请求回调
* @param parameter 请求的一些参数
*/
@Override
public void requestData (int mode, Intent intent, JsonI i, String.。。 parameter) {
HashMap《String, String》 map = new HashMap《》();
JsonBean.Payload payload=new JsonBean.Payload();
mConnect.loadParameter(intent,mode,payload,map,parameter);//加载参数,由子类实现
map.put(“payload”, VolleyConnect.getGson().toJson(payload));
VolleyConnect.getInVolleyConnect().getServiceMsg( map,i);//封装Volley,传入参数以及回调接口
}
/**
* 设置网络请求
*/
@Override
public void setMConnect (InternetConnect mConnect) {
this.mConnect=mConnect;
}
}
同样的共有的方法和字段抽象出presenter的基类
public abstract class BaseActivityPresenter《T extends IPublicView, E extends IPublicModel》 implements IPublicPresenter {
protected T view;
protected E model;
protected RequestResult mRequestResult;
protected Handler mHandler;
public BaseActivityPresenter (T view) {
this.view = view;
Type type = getClass().getGenericSuperclass();//使用反射实例化Model
Type trueType = ((ParameterizedType) type).getActualTypeArguments()[1];
try {
this.model = ((Class《E》) trueType).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
new TimeCount(200, 50, new ITimeCount() {
@Override
public void isRuning (long millisUntilFinished) {
}
@Override
public void isFinish () {
init();//加载子类方法,延时200毫秒加载
}
}).start();
}
/*
设置网络请求回调
*/
public void setRequestResult (RequestResult requestResult) {
mRequestResult = requestResult;
}
/*
获取view的handler,需要传入一个回调接口
*/
public void setHandler (IHandler handlerI) {
mHandler = view.exposeHandler(handlerI);
}
@Override
public void requestData (final int mode, String.。。 parameter) {
view.setLoading(true);
model.requestData(mode, view.exposeIntent(), new JsonI() {
@Override
public void notice (JsonBean bean) {
// if (bean.getStatus().equals(“0”)) {
// mRequestResult.requestDataSuccess(mode,bean);
// }else{
// mRequestResult.requestDataFail(mode,bean);
// }
view.setLoading(false);
}
@Override
public void notice (int error) {
view.showError(error);
}
}, parameter);
}
}
这样我们就可以更加简单方便的使用MVP模式了,下面是使用示例
public class LoginPresenter extends BaseActivityPresenter《ILoginView,LoginModel》 implements ILoginPresenter, RequestResult {
public LoginPresenter (ILoginView view) {
super(view);
}
@Override
public void init () {
setRequestResult(this);
}
@Override
public void requestDataSuccess (int mode, JsonBean bean) {
}
@Override
public void requestDataFail (int mode, JsonBean bean) {
}
}
可以看到,LoginPresenter不再需要去写model字段和网络请求逻辑,通过泛型,可以自动创建model,而网络请求,仅仅需要设置对应的回调就可以哒。
总结,这样做进一步降低了代码耦合,方便以后代码维护,而且整个MVP感觉更加简单。
android mvp 利弊,android mvp模式有什么弊端 - 什么是android mvp模式,android mvp模式有什么弊端...相关推荐
- android 打开免打扰模式_「每日一个手机小技巧」手机飞行模式原来有着这么重要的作用...
提到"飞行模式"这个模式,在安卓手机和iPhone普及之前就它就已经存在于我们的手机之中,那么它究竟是一个怎样的模式呢?平时我们又是否有需要开启这个模式,或者说什么时候需要开启什么 ...
- android 打开免打扰模式_拿了十年手机,才知道飞行模式还有这4大作用,网友:非常实用...
下面我们来说说手机上的飞行模式有什么作用?如果你也感兴趣的,那就一起来看看吧! 一.飞行模式好处 1.加速充电 将手机上的飞行模式开启,它的第一个好处是能加快手机的充电速度,大家以后记住了,如果在为手 ...
- android p正式版一加6,国内首家!一加氢OS Android P正式版更新
原标题:国内首家!一加氢OS Android P正式版更新 一加手机在成为谷歌Android P的首批更新厂商之后,在Android P的更新上就处在了各大手机厂商的前列,并成为了首个适配Androi ...
- android 文件传输_使用“发送到”轻松将文件传输到您的Android设备
android 文件传输 The "Send to" menu has been around since Windows 95; so long a lot of users m ...
- Android第一行代码学习思考笔记(碎片、广播、持久化技术和Android数据库)
Android第一行代码学习思考笔记(碎片.广播.持久化技术和Android数据库 第四章 手机平板要兼顾--探究碎片 4.1碎片是什么(Fragment) 4.2碎片的使用方式 4.2.1碎片的简单 ...
- Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具
Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具 记得我的第一篇博客就是写Android Studio,但是现在看来还是有些粗糙了,所有重构了一下思路, ...
- android n进入分屏代码分析_不只是分屏多任务,Android N 的这些特性也与你有关...
本文来自 TECH2IPO / 创见,作者@DavidZh 2016 年 Google I/O 大会开放注册之后,Google 出人意料地放出了下一代移动操作系统 Android N 的开发者版本. ...
- android系统用在什么电脑,手机变电脑的简单操作 适用于所有Android系统的向日葵...
现如今,什么电子设备对于我们来说最重要呢?毫无疑问,必定是人手一部不离不弃的手机!不过,可能有"杠精"会说了,电脑不是更重要?毕竟办公离不开,还有很多大型网络游戏也只能在电脑上才享 ...
- android wear 兼容问题,【悲剧了】仅 1/4 安卓手机兼容 Android Wear - 爱应用
在不久前举行的谷歌 I/O 大会上,谷歌为我们带来了智能穿戴系统 Android Wear,LG G Watch 以及三星 Gear Live 将率先支持 Android Wear.摩托罗拉发布了一段 ...
- android开发环境建立以及开发工具的使用--怎样使用eclipse来开发android源码
/** 版本:1.0 日期:2009-04-01 作者:HKjinzhao 备注: 转自:http://blog.csdn.net/hkjinzhao/article/details/4043997 ...
最新文章
- Docker镜像的导入导出
- java练气期(1)----java高级(JDBC)
- Web Form中的Datagrid的自定义分页
- ORC文件存储格式的深入探究
- 我们未能完成您的购买_销售完成后,客户的消极情绪产生的原因及处理方法
- android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...
- 在JAR中打包使用JAR库
- 阿里矢量图标库 - 如何修改和使用自定义字体名称
- Visio 2003 Professional
- OpenSSH私钥BEGIN OPENSSH PRIVATE KEY与BEGIN RSA PRIVATE KEY格式转换方式
- matlab张正友程序,张正友标定程序—MATLAB
- 洛谷P1330 封锁阳光大学(BFS, 并查集)
- 双拼对简拼和混拼的支持
- 面试:WebSocket相关
- 当区块链是数字经济和数字社会的基石时,我们如何发现机遇?
- 遍历日历 LocalDate
- 当代大学生应该如何学习计算机科学
- 51单片机lcd1602实验(单片机的模拟电话拨号)
- 重装系统按f几进入u盘启动
- Jetpack All In Compose ?看各种Jetpack库在Compose中的使用
热门文章
- 【ChatGPT】是一个危机与机遇并存的时代
- 记大学里痛苦的考驾照经历(希望引以为戒)一
- 排水管不能穿越计算机房,【华信案例】某省电信BBU机房给排水管道穿越解决方案...
- 01-windows调试工具(ProcDump使用)
- Activiti7工作流流程详解
- 计算机考研指什么时候,考研专业课什么时候开始复习
- 英国约克大学留学生本科没有毕业申请硕士你还在犹豫吗
- Java:什么是Java框架?
- 【毕业设计系列】图像描述方法的实现matlab GUI【含Matlab源码】
- 转载 | 身份管理入门