原文

MVP for Android:How to organize presentation layer

http://antonioleiva.com/mvp-android/

译文

MVP(Model-View-Presenter)模式是著名的MVC(Model-View-Controller)模式的衍生.这段时间,MVP在Android应用开发上得到重视.越来越多的人讨论它,可是可靠的和结构化的信息仍然非常少.这就是为什么我想利用这个博客鼓舞这样的讨论,而且把我们所知

以最好的方式应用到项目中.



什么是MVP?

MVP模式同意展示层与逻辑分离,这样界面怎样工作与我们怎样在屏幕上展现它分开了.理想的情况下,MVP模式使得同样的逻辑能够包括全然不同的可替换的视图.

须要澄清的第一件事是,MVP不是一个架构模式.它仅仅负责展示层.无论如何,在你的架构中使用它都比全然不使用它好.



为什么使用MVP?

在andrid中,activities使交互和数据訪问机制紧密耦合,这引起了一个问题.我们能找到极端样例比方CursorAdapter,混合了adapters和cursors,adapters是视图的一部分,而cursors应该归到数据訪问层的深处.

要使一个应用能够方便的扩展和维护,我们须要非常好的分层.假设明天不再从数据库取同样的数据,而是从web service取,我们该怎么办?

我们须要重做整个view.

MVP使views 独立于我们的数据源.我们把应用至少分成三个不同的层,这样使得測试更加独立.使用MVP使我们可以把大部分逻辑从activities拿走,这样我们不使用instrumentation就能測试.



在Android中怎样实现MVP?





怎样实现MVP,在一開始答案就变得非常分散.有非常多MVP的变种,每一种都依据他们的须要调整了这个模式的想法和更舒服的实现方案.模式的变化主要基于我们托付给presenter的职责数量.

是view负责显示和关闭进度条,还是应该presenter来做?在Action Bar中,谁来决定展示哪个动作?这是艰难讨论的開始.我将展示我是怎样工作的,但我希望这篇文章成为一个地方,讨论怎样应用MVP的严格指导方针,由于眼下为止没有标准的实现方式.



The presenter

Presenter是负责扮演view和model的中间人.它从model获取数据,并将返回的数据适配view.但不像严格的mvc,当你和view交互的时候,它也决定将发生什么.



The View

View经常被一个activity 或者 Fragment实现(这取决于app的结构),view包括一个presenter的引用.理想情况下,Presenter将由类似Dagger的注解器提供.注解器负责创建Presenter对象,但实际上你不这样子做.view唯一做的事,就是每当有交互动作的时候调用presenter的方法(比方点击button).



The model

在一个分层架构良好的应用中,这样的Model仅仅是一扇通往领域层或者业务逻辑的大门.假设我们使用Uncle Bob clean architecture,Model非常可能成为实现了一个用例的交互器.可是这是还有一个主题,我会在未来的文章中讨论.如今,全然能够把它看成view上展现的数据的提供者.



一个样例

由于这个解释有点长了,我写了个放在github上的mvp的样例.由登陆界面组组成,登陆界面能够验证数据,而且同意进入带有从model返回的列表的首页.这篇文章没有解释不论什么代码,由于那非常easy,假设你认为难以理解,我会在写一篇文章详解.

MVP demo地址:https://github.com/antoniolg/androidmvp



结论

把逻辑和界面分离并不easy,可是MVP模式能够防止我们的activities终于退化成很耦合的类,包括数百或数千行代码.在大型应用中组织好我们的代码是至关重要的.否则,就不可能维护和扩展.

适用android的MVP:怎样组织展示层的更多相关文章

  1. 说说Android的MVP模式

    http://toughcoder.NET/blog/2015/11/29/understanding-Android-mvp-pattern/ 安卓应用开发是一个看似容易,实则很难的一门苦活儿.上手 ...

  2. Android 组件化/模块化之路——在展示层搭建MVP结构

    Android 组件化/模块化之路——在展示层搭建MVP结构 什么是MVP Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设 ...

  3. Android MVC MVP

    从.NET的宠物商店到Android MVC MVP   1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次 ...

  4. Android源码剖析之Framework层升级版(窗口、系统启动)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 看本篇文章之前,建议先查看: Android源码剖析之Framework层基础版 前面讲了frame ...

  5. Android开发MVP模式解析

    http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html 在开发Android应用时,相信很多同学遇到和我一样的情况,虽然 ...

  6. Android开发 MVP模式的规范记录(个人总结)

    前言 首先,这篇文章不在讲解什么是mvp模式,如果需要请自行搜索mvp模式文章了解.这个文章里我只记录mvp模式的创建和mvp各自层的界限.另外这个博客属于个人使用mvp模式后一些经验总结与记录.并不 ...

  7. android的MVP模式

    MVP简介 相信大家对MVC都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型. ...

  8. MVC5 网站开发之五 展示层架构

    展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...

  9. Android实现图表绘制和展示

    本文演示在Android平台中绘制和展示图表示例,本示例是基于RChart 2实现的. 在一个系统中经常要用到图表统计数据,在WEB开发中图表绘制是一件简单的事情,因为有比较多的开源方案.但在Andr ...

随机推荐

  1. js正則表達式--验证表单

    检測手机号码:/0? (13|14|15|18)[0-9]{9}/ 检測username:(数字,英文,汉字.下划线.中横线):/^[A-Za-z0-9_\-\u4e00-\u9fa5]+$/ pas ...

  2. solr简介

    Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包 ...

  3. 运动识别之HOJ3D和HMM

    http://cvrc.ece.utexas.edu/Publications/Xia_HAU3D12.pdf   View Invariant Human Action Recognition Us ...

  4. __get__()方法研究

    看源码的时候发现了这个魔法方法 class A(object): def __init__(self): self.name = 'mod' def __get__(self, instance, o ...

  5. 洛谷 P2372 yyy2015c01挑战算周长

    P2372 yyy2015c01挑战算周长 题目背景 yyy2015c01快速的解决了问题,受到邻居们的赞许,高兴的回到家,把糖给了妈妈,吃了香喷喷的午饭,又睡了一个甜甜的午觉,感觉人生真美好.下午爸 ...

  6. 【LeetCode-面试算法经典-Java实现】【130-Surrounded Regions(围绕区域)】

    [130-Surrounded Regions(围绕区域)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a 2D board containing 'X ...

  7. Android开发经验之在图片上随意点击移动文字

    只要在图片范围之内,文字可随意点击移动. package xiaosi.GetTextImage; import android.content.Context; import android.con ...

  8. 2.Xml与多个对象的映射(聚合或组合)及注意事项

    在我们的实际应用中,Xml中的结构往往不止这么简单,一般都会有2,3层.也就是说如果映射成对象就是聚合(组合)的情况 . 就用我们上一章的例子继续来讲,简单我们的Book的author现在不止是一个S ...

  9. Linux下搭建JSP环境

    Linux下搭建JSP环境     作为一名Java EE系统架构工程师,经常需要搭配和建立JSP(Java Server Pages)的开发环境和运行环境,所以本人在平时的工作中积累了一些在Linu ...

  10. AJAX - 封装AJAX GET 数组join( )方法 键值对取value POST请求参数注意点

    function objToStr(obj){ obj.t = new Date().getTime(); // 给obj动态增加了一个属性 // 这个给对象添加属性的方法, 会被直接加到键值对里?? ...