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模式的更多相关文章

  1. Java(Android)编程思想笔记03:在Android开发中使用MVP模式

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

  2. Android 中的MVP 模式

    MVP模式的核心思想: MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成功接口,Model类还是原来的Model. MVC 其中View层其实就是程序的UI界面,用于向用户展示 ...

  3. 如何去除vue项目中的 # --- History模式

    来自:https://www.cnblogs.com/zhuzhenwei918/p/6892066.html 侵删 使用vue-cli搭建的环境,在配置好路由之后,可以看到下面的情况: 但是不难发现 ...

  4. 在Andoid开发中使用MVP模式来解耦,增加可测试性

    by Jeff Angelini posted on 7/20/2011 2:35:00 PM 将应用程序UI的表现从Ui的逻辑中分离是一个好的想法.这种分离减少了代码耦合,代码更加干净, 甚至可以有 ...

  5. Android GreenDao 在组件化项目中的一个问题 - 2018年7月5日21:15:14

    组件化项目使用GreenDao时注意的事项: 1.要在组件化中的基础库(domain层)创建实体类: 2.如果sycn之后不能生产Dao文件,使用 Android Studio 的Gradle插件重新 ...

  6. [Android Studio Problems]记录克隆项目中遇到的坑(问题)以及解决方法

    ①Migrate project to Gradle? 问题描述: This project does not use the Gradle build system. We recommend th ...

  7. android中的MVP模式

    1.建立bean public class UserBean { private String mFirstName; private String mLastName; public UserBea ...

  8. springboot 项目中 使用 原型 模式 实现每一次 都获取不同的实例

    直接 上代码:

  9. Androidmanifest.xml在Android项目中的作用

    以下是一个项目中的AndroidManifest.xml文件: <?xml version="1.0" encoding="utf-8"?> < ...

随机推荐

  1. Ajax校验

    一.Ajax简介 AJAX即(Asynchronous JavaScript and Xml)(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. Ajax的关键元素包括以 ...

  2. [LintCode] Reverse Words in a String 翻转字符串中的单词

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...

  3. MySQL中INFORMATION_SCHEMA是什么?(2)

    information_schema数据库表说明: SCHEMATA:提供了当前mysql实例中所有数据库的信息.是show databases的结果取之此表. TABLES:提供了关于数据库中的表的 ...

  4. JS创建缩略图

    <script language="javascript"> //显示缩略图 function DrawImage(ImgD,width_s,height_s){ /* ...

  5. x86架构手机跑安卓好吗?(脑补)

    华硕低价位手机ZenFone一推出就掀起市场话题,许多人也对ZenFone所采用的Intel Atom处理器有所意见,深怕其相容性问题无法正确执行应用程式App,这究竟是怎么回事呢? Intel近几年 ...

  6. [工具分享]JetBrains ReSharper 9.0 正式版和注册码

    话不多说.直接上百度云盘分享链接.有需要的盆友去下载吧. 百度云盘:http://pan.baidu.com/s/1kTKIQhh 注册码这里提供一个.有需要的自己拿走.或者可以使用压缩包里面的key ...

  7. nginx安装waf防护

    一.安装nginx 二.安装luajit2.0 三.安装ngx_devel_kit#wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.1 ...

  8. python学习道路(day5note)(列表生成式,生成器,装饰器,常用模块)

    生成列表的方式 data = [1,2,3]  需求   每个数字加上1 # data = ( x*2 for x in range(5)) print(data)   列表生成式 后面的I赋予加1操 ...

  9. python学习道路(day3note)(元组,字典 ,集合,字符编码,文件操作)

    1.元组()元组跟列表一样,但是不能增删改,能查.元组又叫只读列表2个方法 一个 count 一个 index2.字典{}字典是通过key来寻找value因为这里功能比较多,所以写入了一个Code里面 ...

  10. BZOJ 1003 物流运输【最短路】【动态规划】

    这道题数据太小啦!先枚举i,j表示从第i天到第j天不更改航线的费用. 然后直接跑最短路算法(我用的是Q版男朋友算法) 动归方程显然是f[i] = min(f[i], f[j] + cost[j+1][ ...