Android架构进阶(一)——MVP

Google 官方Android MVP架构实践 一、Google 官方MVP介绍 近期,关于Android开发架构的讨论沸沸扬扬,各大技术平台随处可见关于Android架构的技术文章。MVC、MVP、MVVM等等,就目前的形式来看,MVP模式在Android开发领域界逐渐流行了起来。前段时间,Google也忍耐不住Android MVP架构的火热程度,给广大Android程序员带来了福利,推出了Google官方MVP架构例子。源码见: htt 阅读详情

Android架构进阶(一)——MVP

Android传统MVC架构

传统的MVC架构中,Activity与Fragment几乎包含了M-V-C三个模块,这种开发模式很大程度上使得所有代码全部集中在一个类里面,经常混乱没有秩序,使得维护起来变得困难,经常在首次开发过程中出现问题都难以定位,跟别提后期维护,如果换人维护则更是要耗费大量时间和精力。

MVP架构

相对于MVC而言,MVP架构显然代码逻辑清晰很多,他将MVC中Activity与Fragment里的关于逻辑与数据获取的工作分配给了Model类,Presenter类,从而使Activity\Fragment实实在在的成为了V–只处理与页面上控件展示有关的操作。

传统MVC架构

mvc

MVP架构

MVP

从上面的两个图我们可以看出,不论MVC还是MVP,M层的东西使没有什么变化的,我们都是在M层进行获取数据的操作。而V层在两种架构中就由不同的东西来担任了:

  • MVC中的V:严格意义上来讲就只是XML布局文件,或者是Java的自定义控件。
    这使得C层的代码就过分的庞大而且集中了,因为C层不仅仅要处理业务逻辑,还要处理页面展示等相关的逻辑(比如View的findViewById()操作、初始化),而且我们大多喜欢在业务逻辑中添加控件展示逻辑,这使得整个编码的逻辑异常庞大,有的页面甚至会达到一个方法几百上千行,严重增加了维护的成本。
  • MVP中的V:这里就纯纯的是一切处理试图展示逻辑的代码,通常我们把这些操作都放在Activity\Fragment中。
    这样一来我们就可以吧业务逻辑与页面展示逻辑分开来处理了,整体的逻辑线条也非常清晰,我们在P层中只做业务逻辑的处理,V层只做页面展示的逻辑,用户从V层操作进入,到P层进行业务判断,业务逻辑中调用Model层获取数据,Model层在回调P层返回成功失败,业务判断成功失败操作再回调V层,展示给用户。

使用MVP架构

这里我们用常用的语言环境,也是我们日常的需求中的一部分的话来举例子:

“这里如果用户点击按钮A 则通过调用接口B获取数据,如果获取数据成功,判断数据中C是否大于D,如果是展示View-E”

  • 我们将 点击按钮A 和 展示View-E 看成是页面展示逻辑,放到V层处理。
  • 我们将 调用接口B获取数据 看成是获取数据操作,放到M层处理
  • 我们将 获取数据成功 然后判断数据中 C是否大于D 这一些列操作看作是业务逻辑,我们可以放在P层

在这里插入图片描述

通过一个整体流程图的展示,我们可以从中看出,用户能感知到的一切操作都是在V层,P层没有任何的干货,完全是处理V与M层之间业务的过度桥梁,M层只有数据请求,M-V-P各层分工相当明确。

MVP 架构的实例

这里我们来把一个应用场景,用MVP的结构方式做成一个实例,已便大家理解

实例需求

最简单的登录流程:

  • “用户输入用户名,密码,点击登录,校验输入是否正确,不正确弹窗提示,正确则调用登录接口,登录失败弹窗提示,登录成功则将返回的数据存储至本地”

代码设计

这是一个最简单的需求,也是我们日常最常见的需求之一,与MVC那种上来就写的编码习惯,MVP似乎多了一步设计代码的步骤

  • 使用MVP,通常我们会封装一个Contract的类用来管理M-V-C对应的接口模板,剩下的我们只要对应实现这三个接口即可。
public class LoginContract{
    
    public interface LoginView{
        void initView();
        void submitSuccess(Object returnData);
        void errorToast(String errMsg);
    }
    public interface LoginPresenter{
        void init();
        void submit(String username,String password);
        void loginSuccess(Object returnData);
        void loginFailed(String errMsg);
        
    }
    public interface LoginModel{
        void login(String username,String password);
    }
    
}

这里我就不写注释了,大家看方法名也可以看出来方法的功能,向这样的一个Contract类编写完成后,基本上我们这个业务及交互的流程基本上就已经确定了

在这里插入图片描述

  • 这里我们的入口是登录页面的Activity或者Fragment,我们将他们实现LoginContract.LoginView接口,然后重写方法,在页面初始化之前new一个Presenter对象,在页面登录按钮点击事件里我们调用presenter的submit()方法把用户名密码传进去。

  • 写一个Presenter实现LoginContract.LoginPresenter,重写里面方法,构造方法中把登录页面的LoginView传进去,并new 一个Model对象,使得presenter可以调用M层与V层的所有方法,起到桥梁的作用

  • 写一个Model实现LoginContract.LoginModel,重写里面方法,并在构造方法中传入Presenter

我们完成着些操作之后,只要按照上面流程图中的关键节点,调用相应的方法,我们的登录流程就结束了。

这里具体代码实现我就不写了,太过于平平无奇,大家应该都会实现。

注意

其实上面我省略了一个步骤,就是在编写Contract类之前,我们需要产品确认业务流程后,我们要有一个流程上的总结,也就是设计一套操作流程,你也可以画一个流程图,或者也可以自己构思,不做实际的产出物。

以上面的实例为例,我的流程逻辑如下

    用户点击登录 -> 校验输入内容

    输入内容不合法 -> 弹框提示
    输入内容合法   -> 调用登录接口
  
    登录接口成功  -> 登录成功,获得返回数据 -> 保存登陆数据,跳转页面
    登录接口失败  -> 弹窗提示

有了这个逻辑之后,我们才能编写出Contract类,如果有流程图的话,效果会更好,不过会很费时。

总结

当你一个MVP架构的页面已经成型以后,如果需要修改业务逻辑,我们只需要针对P层的Presenter进行修改就可以,如果新增页面展示逻辑,我们就针对V层修改对应方法,添加接口或者数据源的时候,我们在M层添加方法或更新方法就OK

  • 当你的Contract类写好以后,你会发现,你在写代码之前,会花时间设计你的代码了,你会深入的去理解业务逻辑,这样就会减少很多的业务逻辑上的bug,如果发现bug可以在interface里面添加,条理清晰且不易混淆。
  • MVP架构是会多处很多类,但是相比MVC,MVP更拥抱接口化编程,我们维护的时候,或者有新同事接手你的项目的时候,只要看Contract类就会理解你的业务逻辑,从而更便于维护。
【Android】安卓开发中的MVP架构模式与应用实例 安卓开发中的MVP架构模式与实例 文章目录安卓开发中的MVP架构模式与实例MVC架构模式的弊端MVP架构模式的特点MVP架构的关键点MVP架构的安卓应用实例创建新的项目修改String.xml文件activity_main.xml文件定义Contract接口Model类创建Presenter类在MainActivity文件中定义View的功能MVP架构模式的优略势优点缺点 在入门安卓开发的阶段,初学者经常会把所有业务逻辑都挤到MainActivity类中。这种做法最终会导致Activity的UI与应用数据处 阅读详情

相关推荐

如何运用好DeepSeek为自己服务:智能增强的范式革命 || 目录

1.1 认知增强的三次浪潮1.2 DeepSeek认知增强模型1.3 人机认知耦合协议1.4 认知增强的数学基础。

𝓓𝓸𝓶𝓲𝓷𝓪𝓽𝓲𝓷𝓰 𝓐𝓵𝓵 𝓣𝓱𝓲𝓷𝓰𝓼 1226

Android架构设计:手把手教你撸一个简洁而强大的MVP框架!

写在前面 Android端的MVP架构已经出来有很长时间了。而对于Android的MVP实现模式,也并没有个标准的实现方式。 现在市面上最流行的是google开源出来的一套MVP模型,此模型可到此google家MVP开源地址进行查看。 而此篇博客将要介绍的并不是google的MVP模型。而是根据我自身理解所创建的一种MVP模型。与google的MVP模型相比,此种MVP模型具有以下一些优势: 支...

weixin_34409822的博客 402

android OTA升级之后,apk崩溃无法启动

也就是说,我们这个高低版本是fingerprint相同的情况,这个问题追述到jenkins编译,启动job时会初始化一个BUILD_NUMBER值,这个值正好跟Android的build系统的名称重复,这就导致Android build系统那一套拼接时间戳的值不会走,因为jenkins一启动就会定义该值,而我们jenkins服务器迁移过,这个值又会从1开始累计,导致前后版本都是16,从而导致fingerprint一致。问题背景:系统版本从低版本升级到高版本后,apk崩溃启动失败。硬件平台:QCS6125。

kevin's cache的专栏 1347

Android进阶——MVP从入门到进阶

1.定义MVP的全称为Model-View-Presenter,即模型-视图-协调器(主持者)Model:处理数据和业务逻辑等,如:数据库的操作,数据的请求,数据运算,JavaBean; View:显示界面,展示结果等,一切与界面相关的,如:XML文件,Activity,Fragment,Dialog; Presenter:协调Model和View模块工作,处理交互;2.使用下面通过一个列子做一个解

ljp的博客 4166

Oracle数据库安装图文教程 附百度云oracle Database 11g 安装包

一,Oracle数据库安装包下载 1.从Oracle官网下载所需的数据库安装包【下载需要注册登录Oracle账户】     http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 2.此处有下载好的Oracle Database 11g Release 2  百度云网盘  提取码:z...

向来如此,就一定是对的吗 6万+

Ubuntu终端一键安装英伟达驱动:无需手动下载的完整指南

本文提供了一份在Ubuntu系统上通过终端命令一键安装英伟达显卡驱动的完整指南。该方法利用官方PPA源,无需手动下载驱动文件,可自动检测硬件并安装最佳版本,极大简化了流程,适合深度学习环境搭建等场景,有效提升安装效率与稳定性。

weixin_29232121的博客 181

Android之MVP架构

Android MVP初探 最近Android MVP非常火,特地研究了一翻,至于为什么火,自行百度google 我比较喜欢的两点是: 业务逻辑与View和Model分离,需求变更的时候修改起来简单方便单元测试 未使用MVP程序是这样的 Paste_Image.png 使用MVP后是这样的 Paste_Image.png

LVXIANGAN的专栏 2371

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

weixin_44119674的博客 440

Android 进阶之 MVP,android学习网站

void onUsernameError(); void onPasswordError(); void onSuccess(); } public void login(final String username, final String password, final OnLoginFinishedListener listener) { mHandler.postDelayed(new Runnable() { @Override public void run() { if (TextUtils.

m0_66155412的博客 800

避坑指南:新手爬百度图片3个致命错,改完批量保存本地(亲测有效)

新手爬百度图片的核心是“绕开静态HTML,抓准API接口+处理反爬+提取原图”,改完本文提到的3个核心错,就能稳定批量保存高清图片。这套思路可复用在其他图片网站(如必应图片、360图片),只需修改API接口和参数即可。如果想进一步优化,可添加代理IP池、多线程下载(新手不建议,容易触发反爬)、图片去重等功能!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1587

【GameFramework框架内置模块】8、文件系统(File System)

最近好忙,鸽了好久。不能颓废了,继续发力。今天分享的是GF框架的文件系统。首先,引用比较官方的说法:GF的FileSystem虚拟文件系统,使用类似磁盘存储的感念对零散的文件进行集中管理,优化资源加载时产生的内存分配,也可以对资源进行局部片段加载,极大的提升了资源加载的性能。通俗点讲就是,我这个模块就是加载磁盘文件的,优化加载时产生的内存分配。那么,它是怎么优化的呢?

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2453

Android MVP(一)架构介绍与使用入门

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.youkuaiyun.com/smile_running MVP 架构系列文章: Android MVP 架构(一)MVP 架构介绍与实战运用 Android MVP 架构(二)MVP 之 BaseMVP 基础框...

你若盛开,蜜蜂自来 1万+

OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案

双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。

大模型大数据攻城狮的专栏 1235

安卓架构MVP(一)

Google官方MVP Sample代码解读 关于Android程序的构架, 当前最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo地址:android-architecture. 本文为阅读官方sample代码的阅读笔记和分析. 官方Android Architecture Blueprints [beta]: Android在如何组织和构...

xxdw1992的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android 安卓MVP架构(带视频)

引入 M:M层,也就是我们在程序中经常出现的model层,他的功能就是处理数据,其他任务不由他来接手。 V:V层,我们的view层,也就是显示数据的地方,我们在得到数据之后,把数据传递给view层,通过他来显示数据。同时,view层的点击事件等处理会...

两行代码 踏踏实实de工作 6830

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android架构(一)MVP全解析

关于架构的文章,博主很早就想写了,虽说现在比较流行MVVM,但是MVP以及MVC也没有过时之说,最主要还是要根据业务来选择合适的架构。当然现在写MVP的文章很多,也有很多好的文章,但是大多数看完后还是一头雾水,所以还是自己总结比较靠谱。

Android进阶三部曲 - 刘望舒 1万+

【Android】MVP架构

MVP(Model-View-Presenter)是一种常见的软件架构模式,尤其在Android应用开发中被广泛使用。它将应用程序分为三层:Model、View 和 Presenter,以实现职责分离,提高代码的可维护性和可测试性。

2301_79977698的博客 3425

Android mvp 架构的自述

最近发现再也无法忍受越来越臃肿的Activity代码,越来越来混乱的Activity层的代码,投入到了MVP的怀抱。目前来看MVP的架构还是很适合Android的,在这里记录一下一点心得,希望都给想用MVP的人一点帮助。老的MVC架构刚开始接触Android的时候会觉得Android的整个代码架构就是一个MVC。 M : 业务层和模型层,相当与javabean和我们的业务请求代码 V : 视图层,

还不走 9104

Android MVP架构搭建

Android MVP架构搭建前言一、MVP架构简介二、乞丐版MVP架构模式的代码实现1.文件目录结构2.编写代码三、平民版MVP架构 - base层顶级父类1.结合Activity构建base层2.代码实现3.最终效果 前言 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的。而对于Android应用的开发中本身可视为一种MVC架构。通常在开发中将XML文件视为MVC中的View角色,而将Activity则视为MVC中

weixin_45208009的博客 1248

Android MVP架构封装

目录什么是MVP架构mvp三层含义mvp模型图mvp和mvc的不同在mvp中使用LifeCycle绑定生命周期P层封装通过LifeCycle实现P层接口IPresenterP层具体实现M层封装M层具体实现V层封装V层接口基础Activity基础Fragment源码地址 什么是MVP架构 mvp是目前使用最为广泛的架构,其本质上是对mvc的改进,可以是代码结构更为清晰,解耦合,分离了视图逻辑和业务逻...

Seven丶Echo的博客 3200

Android安卓MVP模式

最近实习写mvvm比较多,但是好多老项目都是mvp,准备接下来写一个mvp模式的demo练手,在此之前做一个复习。mvp在mvc模式的基础上发展而来,原来的Controller是Activity,但是还view,高度耦合。具体可以看我的上一篇博客。

qq_45077023的博客 1238

android MVP——mvp架构的应用和优化

MVP架构在android还是很好用的。我也在试着将mvp用在项目中。下面我就来说说mvp模式的应用和优化。mvp模式的概念MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。比较mvc:1,在MVC里,View是可以直接访问Model的,View里会包含Model信息,不可避免的还要包括一些

boolean的博客 5925

Android MVP 架构介绍

Android 中 MVC 的简单理解https://blog.youkuaiyun.com/qq_17798399/article/details/95933628 MVP模式 相信大家对MVC都是比较熟悉了:M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presente...

青冘的技术学习博客 3498

MvpDemo:掌握Android MVP架构的绝佳起点

MvpDemo:掌握Android MVP架构的绝佳起点 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在Android开发的世界里,架构模式的选择对于项目的可维护性和扩展性至关重要。MvpDemo 是一个基于 Model-View-Presenter (MVP) 设计模式的Android开发示例项目,旨在帮助开发者深入理解并实践MVP架构。通过这个项目,您不仅可以学...

gitblog_09784的博客 1074
上一篇: 关于常用的排序算法
下一篇: Android架构进阶(二)—— 面向对象设计原则与23种设计模式
豪利丶王
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值