Android -- 思考 -- 为什么要在项目中使用MVP模式
1,其实有时候一直在找借口不去思考这个问题,总是以赶项目为由,没有很认真的思考这个问题,为什么我们要在项目中使用MVP模式,自己也用MVP也已经做了两个项目,而且在网上也看了不少的文章,但是感觉在高层次的思想上还是没有去理解它,都是泛泛而谈的“解耦”、“扩展”的字眼,作为一个初中级开发者,我需要的是在实际开发场景中去一一对比一下,让开发者通过比较出来的优点来选择MVP模式,那么下面就带着大家来简单的分析分析。
2,现在有这样的一个需求场景,用户点击按钮从网络上获取数据,展示到我们的TextView上面,功能很简单,我们正常使用MVC的话就是在布局文件里面添加TextView和Button控件,再在Activity中写网络请求并将得到的数据通过逻辑设置到控件TextView上去,这样就能实现我们的功能了,现在产品将我们的需求更改成,用数据库中去获取我们的数据,并把数据以Toast的形式来提醒用户,那么现在有下面两个场景
①、之前的版本的代码是你写的,那么现在你就要去改Activity中的逻辑,虽然麻烦,但是没事,因为之前是你写的,你知道在哪里去修改它的。
②、之前的版本的代码不是你写的,那么现在就有点痛苦了,你需要把逻辑重新看一遍,再重新修改之前的代码,如果逻辑一复杂,你重新看一遍逻辑要时间,如果改错的话,影响之前已经写好的功能,这完全违背开闭原则
那么如果我们之前就是使用的MVP模式来开发的话,我们面对现在这个新需求的话该怎么做呢?
首先,对于数据由接口的形式更改成从数据库中读取,那么我们只需要Model层中的数据获取逻辑,Presenter 层拿到的是 Model 的接口,只关心 Model 层返回的数据,至于你的数据是从网络还是数据库还是本地数据库文件获取的,根本不必关心。
进而,对于数据显示有TextView更改为Toast,由于Presenter 拿到的也是 View 的接口, Presenter 从 Model 获取完数据,返回给 View ,就完成了他的工作,他根本不用管 View 是怎么实现的,使用 TextView 显示还是 Toast 显示,这些都是 View 的事
情,所以他们每层只用把各自的事情做好根本不用管以外的事情。
这样我们就可以把 View , Presenter , Model 拿给三个不同的人写,需求一变不会影响整个代码,将问题最小化。UI出问题了我们就把问题定位到View层,数据出问题了我们就把问题定位到Model层。实现我们上面看到的“解耦”、“扩展”、“团队协作”的功能。
看了上面的内容,你对使用MVP的理由还很模糊吗?
See You Next Time····
Android -- 思考 -- 为什么要在项目中使用MVP模式的更多相关文章
- Java(Android)编程思想笔记03:在Android开发中使用MVP模式
1. MVP模式简介: MVC模式相信大家肯定是比较熟悉的:M-Model-模型.V-View-视图.C-Controller-控制器. MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M- ...
- Android 中的MVP 模式
MVP模式的核心思想: MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成功接口,Model类还是原来的Model. MVC 其中View层其实就是程序的UI界面,用于向用户展示 ...
- 如何去除vue项目中的 # --- History模式
来自:https://www.cnblogs.com/zhuzhenwei918/p/6892066.html 侵删 使用vue-cli搭建的环境,在配置好路由之后,可以看到下面的情况: 但是不难发现 ...
- 在Andoid开发中使用MVP模式来解耦,增加可测试性
by Jeff Angelini posted on 7/20/2011 2:35:00 PM 将应用程序UI的表现从Ui的逻辑中分离是一个好的想法.这种分离减少了代码耦合,代码更加干净, 甚至可以有 ...
- Android GreenDao 在组件化项目中的一个问题 - 2018年7月5日21:15:14
组件化项目使用GreenDao时注意的事项: 1.要在组件化中的基础库(domain层)创建实体类: 2.如果sycn之后不能生产Dao文件,使用 Android Studio 的Gradle插件重新 ...
- [Android Studio Problems]记录克隆项目中遇到的坑(问题)以及解决方法
①Migrate project to Gradle? 问题描述: This project does not use the Gradle build system. We recommend th ...
- android中的MVP模式
1.建立bean public class UserBean { private String mFirstName; private String mLastName; public UserBea ...
- springboot 项目中 使用 原型 模式 实现每一次 都获取不同的实例
直接 上代码:
- Androidmanifest.xml在Android项目中的作用
以下是一个项目中的AndroidManifest.xml文件: <?xml version="1.0" encoding="utf-8"?> < ...
随机推荐
- Flask 教程
官方文档 推荐教程 环境 pip install virtualenv cd proj_fold virtualenv venv . venv/bin/activate for *unix or ve ...
- zeromq中两个dealer 通过一个router进行通信
发现有童鞋不是很清楚ZMQ中的“请求-回复”模式中的ROUTER怎么用,所以简单介绍一下“请求-回复”模式的使用(最后付代码). 一.讲一讲 1.要使用zmq 通过一个router进行通信,你首先需要 ...
- C# WinForm 慎用 override CreateParams 来重载窗体的一些特性
窗体和控件的属性CreateParams(这真的是一个属性)很神奇,因为通过它你能够很方便的控制窗体或控件诸如边框.最大化最小化关闭按钮的隐藏.窗体的模式化弹窗模式等的一些特性.虽然,CreatePa ...
- Hadoop_UDF示例
UDF: 一进一出 Eclipse端 1. 继承UDF 2. 实现evaluate方法(可重裁实现多个evaluate方法,以实现不同需求) 3. 导出类jar包,注意指定main方法 Hive端 ...
- word-wrap: break-word;和word-break: break-all;的区别
详细查看以下链接.(转载自张鑫旭大神空间) http://www.zhangxinxu.com/wordpress/2015/11/diff-word-break-break-all-word-wra ...
- Python脚本配合Linux计划任务工作
经常遇到直接运行Python脚本没有问题,但是一放入/etc/crontab之后就歇菜的情况,总结了一下,大致需要注意以下几点: 1. 脚本首行加入#!/usr/bin/env python 2. 脚 ...
- php多图上传问题笔记
图片上传好用插件有,比如 uploadify ueditor html5的各种ajax上传插件,大部分都是异步,返回只是true之类,有些时候需要上传图片需要一起上传,其实可以通过操作流程来避免这个 ...
- Android 学习路线图
- 使用 PDO 方式将 Session 保存到 MySQL 数据中
类: <?php /* 使用数据库保存session */ class DBHandler implements SessionHandlerInterface { protected $dbh ...
- Tomcat(多版本)安装注意!
♣电脑安装多个版本的tomcat和切换(解压版的apache-tomcat -5.5.0/ -6.0.45/ -7.0.70 三个版本) ♣tomcat配置环境变量 ♣tomcat5.5. ...