Android应用架构之MVP实现

简介:
回顾上一篇文章 《Android应用架构概述》 ,我们知道,Android App 本质上抽象成两个层次:视图和数据。为了App在发展过程中快速的适应变化,方便维护和快速迭代,我们要将数据和视图解耦,而在解藕方面我们的前辈们在漫长的软件开发经验中为我们提供了两套流行的指导框架:MVC和MVP,其中MVP近年来在Android应用开发上逐渐流行。接着上一篇的内容,本章我将结合具体例子说清MVP解藕的实现。所以本章的思路是:以登录为业务场景,分析对比“非MVP”和MVP的实现方式。demo地址: https://github.com/liuguangli/MVPTeach


业务场景


简单的登录场景。提交登录信息(用户名和密码),处理登录逻辑,返回用户信息并保存。



非MVP的实现


在没有任何分层的指导思想下,我们往往或把视图逻辑数据逻辑都耦合到Activity中来实现。
登录按钮的响应方法:

登录检查:

登录到服务器:

在这里,Activity和Http框架(android-ansyc-http)以及整改数据请求逻辑耦合了。如果以后登录逻辑变化了,那么App所有和登录逻辑相关的页面都会受到牵连;或者Http框架更换了,所有Activity都要受到牵连。(本demo只有一条业务场景一个Activiy体现不出影响的严重性,一个完整的App就能体现出来了)
保存数据:

数据保存的方式有很多中,也可能会随着需求的变化而选择不同的方式,同理,如果所有的Activiy都这样耦合,那么日后想要切换更合适的存储方式将变得寸步难行。


MVP的实现


沿着《Android应用架构概述》的思路,我们先把登录这个业务场景实现的层次图画出来。


类图:



LoginActivity的实现



数据请求和处理逻辑交出去了。至此,Activity变的简单,只负责UI的变化行为,数据请求和处理逻辑的具体实现对它没有影响。

LoginPresenter的实现



LoginPresenterImp作为LoginPresenter的实现类。它的任务和职责是:一、接受LoginActivity提交的登录指令并向LoginManager传递任务(真正的请求在LoginManagerImp中执行)。二、接受LoginManagerImp回调的结果。


LoginManager的实现


LoginManager才是正真处理业务逻辑的家伙,它和两个模块有直接联系。它的职责:一、把来自UI的数据解析成网络框架层所需格式并调用网络框架层请求服务器数据。二、调用本地数据访问层(DAO)存取数据。三、向Presenter传递数据。

用好双刃剑


任何东西都有两面性,mvp虽然为数据视图解耦提供了很好的指导思想,但是我门发现层次变多了,调用栈变多了。着就要求开发人员能够清晰的认识业务划分,清楚的知道MVP中,那个层次该做什么、哪个层次不该做什么。例如:就就面的实现,我门做一点变化:

正如图注释所诉,虽然在形式结构上作了MVP的设计,但因为层次职责没化清,View层作了Mode该作的事情,并没有达到解耦的目的。
demo: https://github.com/liuguangli/MVPTeach
目录
相关文章
|
3月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
526 3
|
24天前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
105 6
|
2月前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
2月前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
290 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
|
3月前
|
Web App开发 Linux 虚拟化
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
171 0
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
|
3月前
|
机器学习/深度学习 数据采集 存储
技术赋能下的能源智慧管理:MyEMS 开源系统的架构创新与应用深化
在全球能源转型与“双碳”战略推动下,MyEMS作为基于Python的开源能源管理系统,凭借模块化架构与AI技术,助力重点用能单位实现数字化、智能化能源管理。系统支持多源数据采集、智能分析、设备数字孪生与自适应优化控制,全面满足国家级能耗监测要求,并已在制造、数据中心、公共建筑等领域成功应用,助力节能降碳,推动绿色可持续发展。
87 0
|
移动开发 安全 Android开发
构建高效Android应用:Kotlin协程的实践与优化策略
【5月更文挑战第30天】 在移动开发领域,性能优化始终是关键议题之一。特别是对于Android开发者来说,如何在保证应用流畅性的同时,提升代码的执行效率,已成为不断探索的主题。近年来,Kotlin语言凭借其简洁、安全和实用的特性,在Android开发中得到了广泛的应用。其中,Kotlin协程作为一种新的并发处理机制,为编写异步、非阻塞性的代码提供了强大工具。本文将深入探讨Kotlin协程在Android开发中的应用实践,以及如何通过协程优化应用性能,帮助开发者构建更高效的Android应用。
|
API 调度 Android开发
打造高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】在移动开发领域,性能优化和响应速度是衡量应用质量的关键因素。随着Kotlin语言的普及,协程作为其核心特性之一,为Android开发者提供了一种全新的并发处理方式。本文深入探讨了Kotlin协程在Android应用开发中的优势,并通过实例演示如何在实际项目中有效利用协程提升应用性能和用户体验。
|
移动开发 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第21天】在移动开发领域,性能优化和流畅的用户体验是至关重要的。随着Kotlin语言在Android平台的广泛采纳,其并发处理的强大工具—协程(Coroutines),已成为提升应用响应性和效率的关键因素。本文将深入分析Kotlin协程的核心原理,探讨其在Android开发中的优势,并通过实例演示如何有效利用协程来优化应用性能,打造更加流畅的用户体验。
146 4