适用android的MVP:怎样组织展示层
原文
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:怎样组织展示层的更多相关文章
- 说说Android的MVP模式
http://toughcoder.NET/blog/2015/11/29/understanding-Android-mvp-pattern/ 安卓应用开发是一个看似容易,实则很难的一门苦活儿.上手 ...
- Android 组件化/模块化之路——在展示层搭建MVP结构
Android 组件化/模块化之路——在展示层搭建MVP结构 什么是MVP Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设 ...
- Android MVC MVP
从.NET的宠物商店到Android MVC MVP 1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次 ...
- Android源码剖析之Framework层升级版(窗口、系统启动)
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 看本篇文章之前,建议先查看: Android源码剖析之Framework层基础版 前面讲了frame ...
- Android开发MVP模式解析
http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html 在开发Android应用时,相信很多同学遇到和我一样的情况,虽然 ...
- Android开发 MVP模式的规范记录(个人总结)
前言 首先,这篇文章不在讲解什么是mvp模式,如果需要请自行搜索mvp模式文章了解.这个文章里我只记录mvp模式的创建和mvp各自层的界限.另外这个博客属于个人使用mvp模式后一些经验总结与记录.并不 ...
- android的MVP模式
MVP简介 相信大家对MVC都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型. ...
- MVC5 网站开发之五 展示层架构
展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...
- Android实现图表绘制和展示
本文演示在Android平台中绘制和展示图表示例,本示例是基于RChart 2实现的. 在一个系统中经常要用到图表统计数据,在WEB开发中图表绘制是一件简单的事情,因为有比较多的开源方案.但在Andr ...
随机推荐
- iOS项目开发实战——iOS网络编程获取网页Html源码
现在我们身处互联网的时代.不论什么一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互.一个没有涉及网络编程的应用会显得比較low,这里我们将会開始使用Swift开发iOS应用,而且主要来 ...
- 最小生成树-并查集-Kruskal-zoj-2048-special judge
Highways description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a ...
- LinkedIn Cubert 实践指南
· LinkedIn Cubert安装指南 · Understanding Cubert Concepts(一)Partitioned Blocks · Understanding Cubert Co ...
- 版本号控制-搭建gitserver
GitHub是一个免费托管开源码的Gitserver,假设我们不想公开项目的源码,又不想付费使用.那么我们能够自己搭建一台Gitserver. 以下我们就看看,怎样在Ubuntu上搭建Gitserve ...
- vue2留言板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- actionMode-theme中修改actionmode中more下拉框的背景颜色
今天在做图库修改是,需要修改图库的actionbar某个按钮弹出来的下拉框的背景颜色,在网上找了个方法尝试下,没有打到自己的要求,不过阴差阳错的却修改了more下拉框的背景,再次记录下,也许以后能用的 ...
- 基于x86平台的Solaris安装视频(时长25分钟)
基于X86平台的Solaris安装视频 本视频分为三个部分分别在附件中1.2.3(第三部分附件较大请在这里下载:http://down.51cto.com/data/263614) ,远程连接的视频由 ...
- Kinect 开发 —— 图片浏览
总体思路 首先运用WPF编写一个简单的支持多点触控的图片浏览程序,这方面您可以参看MSDN上的这篇文章,上面有代码,可能需要FQ才能下载.中文的话,您可以参考Gnie同学关于在WPF上面多点触屏(Mu ...
- 【Hello 2018 D】Too Easy Problems
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 可以考虑把所有的题目按照ai排序. 然后顺序考虑最后做出来的题目个数和第i道题目的ai一样. 则1..i-1这些题目就没有用了. 值 ...
- 使用框架的php假设使用定时服务Cronjob
工作须要用php开发了个监控的小程序,既然是监控就须要定时运行. 之前我用的是chrome加个定时刷新的小插件,放在server上执行.也能实现,就是别扭. 通用正规的做法应该是:linux上的Cro ...