您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Android应用架构之MVP实现
 
来源:码农网 发布于:2016-3-14
  3534  次浏览      22
 

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

业务场景

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

非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该作的事情,并没有达到解耦的目的。

   
3534 次浏览       22
相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS

面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践

锐安科技 软件架构设计方法
成都 嵌入式软件架构设计
上海汽车 嵌入式软件架构设计
北京 软件架构设计
上海 软件架构设计案例与实践
北京 架构设计方法案例与实践
深圳 架构设计方法案例与实践
嵌入式软件架构设计—高级实践
更多...