Android之MVP架构
MVP(Model View Presenter)模式是由MVC模式发展而来的,在如今的Android程序开发中显得越来越重要。本篇文章简单讨论了MVP模式的思想。
啥是MVP
MVP模式的主要思想是将程序的业务逻辑从表现层分离出来,理想情况下,MVP模式可以使得相同的逻辑拥有完全不同且可互换的views。
为啥要用MVP
在Android实际开发过程中,我们会遇到这样的问题:Android中的activity与界面展示和数据访问机制耦合度非常高,既负责页面组件的展示,又负责处理业务逻辑。一个极端的例子就是混合适配器CursorAapter,它既是view的一部分,却又带有cursor,应该放在数据访问层。
为了应用程序具有好的扩展性和可维护性,我们需要有好的架构分层设计。假如以后我们不再从数据库中取数据,而是从网络中获取数据,那么我们只好重新做一个view出来。
MVP分层架构可以使views与数据源相互分离,将业务逻辑从activity中分离出来,它将应用程序至少分为三个不同的层次,从而可以分开独立地调试程序。
怎么用MVP
MVP的架构并不是很死板的,不同的开发人员可以根据自己工程的需要,将MVP的思想运用在自己的项目中。
The presenter
Presenter作为View层和Model层的中间层,它负责根据业务逻辑从model层中检索数据并将其格式化,返回给View层。但是,它不像传统的MVC那样,它还负责响应你与View的交互。
The View
view层常常由activity来实现(也可以使Fragment,View等),它往往持有一个presenter的引用。通常情况下,通过引用注入的方式DI,可以完美地将presenter提供给view层调用。(例子Dagger)View层所要做的就是,通过该引用来调用presenter中的方法来完成对用户在界面操作的相应。
The model
model层是用来完成数据的提供服务。在一个分层架构良好的应用程序中,model层仅仅是作为业务逻辑层访问数据的一个入口。文章:Uncle Bob clean architecture
总结
在Android中将业务逻辑与界面分离并不是一件很容易的事儿,通过MVP的架构思想,我们试图减少activity中的代码量,这样做会使得我们的程序扩展性和可维护性更好。GitHub上关于MVP有一个很好的例子an MVP example on Github
Android之MVP架构的更多相关文章
- 转:Android官方MVP架构示例项目解析
转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...
- MVP架构在xamarin android中的简单使用
好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...
- Android App的架构设计:从VM、MVC、MVP到MVVM
随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...
- 转:Android开发中的MVP架构(最后链接资源不错)
Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...
- 转: Android开发中的MVP架构详解(附加链接比较不错)
转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...
- Android MVP架构分析
App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式 ...
- 设计模式笔记之二:Android开发中的MVP架构(转)
写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...
- Android中的MVP架构分解和实现
1.概述 传统的Android开发架构通常是MVC模式. Model:业务逻辑和实体模型 View:相应于布局文件 Controllor:相应于Activity 单独从逻辑看起来很好,与我们做Web开 ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
随机推荐
- 【sqli-labs】 less36 GET- Bypass MYSQL_real_escape_string (GET型绕过MYSQL_real_escape_string的注入)
看一下mysql_real_escape_string()函数 \x00 \x1a 注入的关键还是在于闭合引号,同样使用宽字节注入 http://192.168.136.128/sqli-labs-m ...
- token的问题汇总
token的作用:认证.授权: 生成:随机码.时间戳.用户 设备 合成: 验证:是否存在.合成验证: 管理:有效期(服务器存储时间or cookie存储过期时间).展期. token生成:或者和用户信 ...
- FormCollection获取请求数据
public ActionResult Add(FormCollection fm) //通过FormCollection 对象获取表单数据 { string message = "&quo ...
- Apache2.2 启动和停止命令
1.启动:net start apache2.2 2.停止:net stop apache2.2
- luoguP3979 遥远的国度 LCT+multiset维护子树信息
Code: #include<bits/stdc++.h> #define maxn 150000 #define ll long long #define inf 21474836470 ...
- Keras学习基础(2)
目录: Keras的模块结构 数据预处理 模型 网络层 网络配置 Keras中的数据处理 文本预处理 序列预处理 图像预处理 Keras中的模型 Sequential顺序模型 Model模型[通用模型 ...
- switch 语句的反汇编浅析
switch 的简单情景(case 不超过 3 项) 首先,我们分析一下 switch 语句的一种简单情景,我们可以用 C 写出如下如下代码. 编译后用 OllyDBG 载入,它将显示出如下的反汇编代 ...
- Mysql入门详解
目录 数据库之Mysql 一 .简单了解数据库 二.Mysql的使用 三.多表查询 数据库之Mysql 本篇文章为观看某教学视频后所作个人总结 一 .简单了解数据库 1.1常见关系型数据库 mysql ...
- 使用VS Code断点调试PHP
vs code 使用一款杰出的轻量级代码编辑器,其中的插件工具不胜枚举而且还在不断增加.使用 vs code 调试 php 代码更是方便简洁,下面我们来一起看一下. 1. 安装 XDebug 扩展 调 ...
- QT5.5移植全攻略【转】
一.编译1.到www.qt.io下载源码,qt-everywhere-opensource-src-5.5.0 2.设置编译器或者说平台.编译器是通过xplatform参数指定的,xplatform后 ...