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

1元 10元 50元





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



  要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 讲座吧   成长之路  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
Android应用架构之MVP实现
 
来源:码农网 发布于:2016-3-14
来自于要资料   778 次浏览     评价:      
 

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

   
 订阅
  捐助
相关文章

阻碍使用企业架构的原因及克服方法
世界级企业架构的行业挑战
企业架构和SOA架构的角色将融合
什么最适合您的组织?
相关文档

企业架构与ITIL
企业架构框架
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

企业架构设计
软件架构案例分析和最佳实践
嵌入式软件架构设计—高级实践
企业级SOA架构实践
 

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

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

相关咨询服务
应用架构设计与构建

锐安科技 软件架构设计方法
成都 嵌入式软件架构设计
上海汽车 嵌入式软件架构设计
北京 软件架构设计
上海 软件架构设计案例与实践
北京 架构设计方法案例与实践
深圳 架构设计方法案例与实践
嵌入式软件架构设计—高级实践
更多...   
 
 
实录 基于Tensorflow进行深度学习
主讲:钱兴会
曾任联想集团大数据平台架构师
 
实录 区块链数据库的原理与应用
主讲:王金剑
区块链数据库SunlightDB创始人,CSDN认证专家
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号