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
目录
相关文章
|
1天前
|
开发工具 Android开发 Windows
Android应用] 问题2:ERROR: unknown virtual device name:
Android应用] 问题2:ERROR: unknown virtual device name:
|
1天前
|
XML JSON API
转Android上基于JSON的数据交互应用
转Android上基于JSON的数据交互应用
|
1天前
|
Android开发
Android应用实例(一)之---有道辞典VZ.0
Android应用实例(一)之---有道辞典VZ.0
|
1天前
|
运维 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第9天】 随着数字化转型的浪潮席卷全球,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了云原生架构的关键组件,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps文化,并分析了这些技术如何帮助企业加速产品上市时间,提高运营效率,并最终实现业务目标。同时,文章也识别了企业在采纳云原生实践中可能面临的挑战,如安全性考量、团队技能提升和复杂的网络管理,并提出了相应的解决方案和最佳实践。
|
2天前
|
安全 Java Android开发
构建高效Android应用:采用Kotlin进行内存优化的策略
【5月更文挑战第8天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,合理管理内存资源是确保应用流畅运行的关键因素之一。近年来,Kotlin作为官方推荐的开发语言,以其简洁、安全和互操作性的特点受到开发者青睐。本文将深入探讨利用Kotlin语言特性,通过具体策略对Android应用的内存使用进行优化,旨在帮助开发者提高应用性能,减少内存消耗,避免常见的内存泄漏问题。
6 0
|
3天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin协程的全面应用
【5月更文挑战第7天】 在移动开发领域,性能优化与流畅的用户体验是至关重要的。随着Kotlin语言的流行,其并发神器——协程,已成为提升Android应用性能的重要工具。本文将深入探讨如何在Android项目中利用Kotlin协程进行异步编程、网络请求和数据库操作,以及如何通过协程简化代码结构,增强应用的响应性和稳定性。我们的目标是为开发者提供一套实用的协程使用模式和最佳实践,以便构建更加高效的Android应用。
18 3
|
3天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin与协程的完美结合
【5月更文挑战第7天】 在移动开发领域,性能优化和资源管理始终是核心议题。随着Kotlin语言的普及,其提供的协程特性为Android开发者带来了异步编程的新范式。本文将深入探讨如何通过Kotlin协程来优化Android应用的性能,实现流畅的用户体验,并减少资源消耗。我们将分析协程的核心概念,并通过实际案例演示其在Android开发中的应用场景和优势。
|
4天前
|
监控 负载均衡 API
微服务架构在现代企业中的应用与挑战
微服务架构已成为现代企业构建灵活且可扩展软件系统的首选。然而,随着其应用的普及,企业也面临着一系列新的挑战。本篇文章将探讨微服务架构的优势、实施时遇到的问题以及解决这些问题的策略。
|
4天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
27 1
|
5天前
|
存储 前端开发 Java
Android应用开发中的MVP架构模式实践
【5月更文挑战第5天】随着移动应用开发的复杂性增加,传统的MVC(Model-View-Controller)架构在应对大型项目时显得笨重且不灵活。本文将探讨一种更适应现代Android应用开发的架构模式——MVP(Model-View-Presenter),并展示如何在Android项目中实现该模式以提升代码的可维护性和可测试性。通过对比分析MVP与传统MVC的差异,以及提供一个实际案例,读者将能深入了解MVP的优势和实施步骤。