关于在安卓开发中简化MVP设计模式带来的效率提升

2024-05-26 20:58

本文主要是介绍关于在安卓开发中简化MVP设计模式带来的效率提升,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MVP已经是开发中很常用的一种设计模式,尽管也有MVVP的改进版,但任何设计模式都是针对具体项目的具体情况而适应的。并不是有了设计模式才有项目工程,而是有了项目工程才产生的设计模式。所以,设计模式并没有哪个更高级的,只有哪个更适应当下各种需求和环境。

 

最开始我在项目中使用MVP设计模式的时候,会在不同的业务下实现Model,View,Persenter。Presenter负责具体和Activity,Fragment等UI实现类沟通,定义调用方法,Model负责具体每个网络请求及返回参数处理。并将结果通过Presenter回调,Presenter再返回给View层。这是比较标准的实现方式,但随着项目业务越来越多,API的数量甚至接近上百个,业务分类也越来越细。如果每个请求都需要在View和Presenter层定义对应的处理函数的话,不光View和Persenter层的代码量越来越大,连UI实现类的回调方法也越来越多,即使某个UI类只需要一个请求和回调,也不得不实现所有的无用回调类,导致代码的美观性和可读性大打折扣。所以我就做了一个小小的改进,在减少代码量消除臃肿代码的的同时,大大提高了开发的效率。

具体实现如下:

首先是View层,这里只需要定义一个基础View接口类,所有的UI实现类都实现它。

public interface IBaseView {/*** 请求成功返回* @param data*/void setSuccess(String API, Object data);/*** 请求失败返回* @param data*/void setFailure(String API, Object data);
}

再定义一个基础Presenter实现类

public interface BasePresenter {// 绑定viewvoid onSuccess(String API, Object data);void onFailure(String API, Object data);}

如,创建一个MainModel

public class MainModel {private MainPresenter presenter;public MainModel(MainPresenter presenter) {this.presenter = presenter;}public void getHomeData() {HttpParams params = new HttpParams();new HttpManager(new HttpManagerCallback() {@Overridepublic void onSuccess(ResultData o) {HomeResponse data = GsonUtil.GsonToBean(o.getData(),HomeResponse .class);presenter.onSuccess(APIConstant.HOME_DATA,data);}@Overridepublic void onError(ApiException e) {presenter.onFailure(APIConstant.HOME_DATA,e);}}).post(APIConstant.HOME_DATA,params);}}

然后是Persenter实现

public class MainPresenter implements BasePresenter {private MainModel mainModel;private IBaseView mView;public MainPresenter(IBaseView mView) {this.mView = mView;mainModel= new MainModel(this);}public void getHomeData() {mainModel.getHomeData();}@Overridepublic void onSuccess(String API, Object data) {mView.setSuccess(API, data);}@Overridepublic void onFailure(String API, Object data) {mView.setFailure(API, data);}
}

UI实现类的调用效果

/*** UI交互*/
public class MainActivity extends BaseActivity implements IBaseView {private MainPresenter mPresenter;@Overrideprotected int getLayoutId() {return R.layout.activity_main;}@Overrideprotected void initView() {mPresenter = new MainPresenter(this);mPresenter.getHomeData();}@Overridepublic void setSuccess(String API, Object data) {if (isFinishing() || isDestroyed()) {return;}switch (API){case APIConstant.HOME_DATA://这里处理返回数据HomeResponse entry = (HomeResponse) data;break;}}@Overridepublic void setFailure(String API, Object data) {}}

可能也有很多其他更简洁更好的实现方法,希望也能像大家多学习一下。

由于写的比较匆忙,欢迎理性交流和指正。

这篇关于关于在安卓开发中简化MVP设计模式带来的效率提升的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005569

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧