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模式有什么弊端...相关推荐

  1. android 打开免打扰模式_「每日一个手机小技巧」手机飞行模式原来有着这么重要的作用...

    提到"飞行模式"这个模式,在安卓手机和iPhone普及之前就它就已经存在于我们的手机之中,那么它究竟是一个怎样的模式呢?平时我们又是否有需要开启这个模式,或者说什么时候需要开启什么 ...

  2. android 打开免打扰模式_拿了十年手机,才知道飞行模式还有这4大作用,网友:非常实用...

    下面我们来说说手机上的飞行模式有什么作用?如果你也感兴趣的,那就一起来看看吧! 一.飞行模式好处 1.加速充电 将手机上的飞行模式开启,它的第一个好处是能加快手机的充电速度,大家以后记住了,如果在为手 ...

  3. android p正式版一加6,国内首家!一加氢OS Android P正式版更新

    原标题:国内首家!一加氢OS Android P正式版更新 一加手机在成为谷歌Android P的首批更新厂商之后,在Android P的更新上就处在了各大手机厂商的前列,并成为了首个适配Androi ...

  4. android 文件传输_使用“发送到”轻松将文件传输到您的Android设备

    android 文件传输 The "Send to" menu has been around since Windows 95; so long a lot of users m ...

  5. Android第一行代码学习思考笔记(碎片、广播、持久化技术和Android数据库)

    Android第一行代码学习思考笔记(碎片.广播.持久化技术和Android数据库 第四章 手机平板要兼顾--探究碎片 4.1碎片是什么(Fragment) 4.2碎片的使用方式 4.2.1碎片的简单 ...

  6. Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具

    Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具 记得我的第一篇博客就是写Android Studio,但是现在看来还是有些粗糙了,所有重构了一下思路, ...

  7. android n进入分屏代码分析_不只是分屏多任务,Android N 的这些特性也与你有关...

    本文来自 TECH2IPO / 创见,作者@DavidZh 2016 年 Google I/O 大会开放注册之后,Google 出人意料地放出了下一代移动操作系统 Android N 的开发者版本. ...

  8. android系统用在什么电脑,手机变电脑的简单操作 适用于所有Android系统的向日葵...

    现如今,什么电子设备对于我们来说最重要呢?毫无疑问,必定是人手一部不离不弃的手机!不过,可能有"杠精"会说了,电脑不是更重要?毕竟办公离不开,还有很多大型网络游戏也只能在电脑上才享 ...

  9. android wear 兼容问题,【悲剧了】仅 1/4 安卓手机兼容 Android Wear - 爱应用

    在不久前举行的谷歌 I/O 大会上,谷歌为我们带来了智能穿戴系统 Android Wear,LG G Watch 以及三星 Gear Live 将率先支持 Android Wear.摩托罗拉发布了一段 ...

  10. android开发环境建立以及开发工具的使用--怎样使用eclipse来开发android源码

    /** 版本:1.0 日期:2009-04-01 作者:HKjinzhao 备注: 转自:http://blog.csdn.net/hkjinzhao/article/details/4043997 ...

最新文章

  1. Docker镜像的导入导出
  2. java练气期(1)----java高级(JDBC)
  3. Web Form中的Datagrid的自定义分页
  4. ORC文件存储格式的深入探究
  5. 我们未能完成您的购买_销售完成后,客户的消极情绪产生的原因及处理方法
  6. android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...
  7. 在JAR中打包使用JAR库
  8. 阿里矢量图标库 - 如何修改和使用自定义字体名称
  9. Visio 2003 Professional
  10. OpenSSH私钥BEGIN OPENSSH PRIVATE KEY与BEGIN RSA PRIVATE KEY格式转换方式
  11. matlab张正友程序,张正友标定程序—MATLAB
  12. 洛谷P1330 封锁阳光大学(BFS, 并查集)
  13. 双拼对简拼和混拼的支持
  14. 面试:WebSocket相关
  15. 当区块链是数字经济和数字社会的基石时,我们如何发现机遇?
  16. 遍历日历 LocalDate
  17. 当代大学生应该如何学习计算机科学
  18. 51单片机lcd1602实验(单片机的模拟电话拨号)
  19. 重装系统按f几进入u盘启动
  20. Jetpack All In Compose ?看各种Jetpack库在Compose中的使用

热门文章

  1. 【ChatGPT】是一个危机与机遇并存的时代
  2. 记大学里痛苦的考驾照经历(希望引以为戒)一
  3. 排水管不能穿越计算机房,【华信案例】某省电信BBU机房给排水管道穿越解决方案...
  4. 01-windows调试工具(ProcDump使用)
  5. Activiti7工作流流程详解
  6. 计算机考研指什么时候,考研专业课什么时候开始复习
  7. 英国约克大学留学生本科没有毕业申请硕士你还在犹豫吗
  8. Java:什么是Java框架?
  9. 【毕业设计系列】图像描述方法的实现matlab GUI【含Matlab源码】
  10. 转载 | 身份管理入门