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. letter upper lower combo

    以前同事为了炫耀ruby的简洁,特意出一道题来考小陈: 在写一个爆破密码的字典生成工具,其中有这样一个需求: 输入一个单词:列出这个单词的所有大小写组合,比如ruby Ruby rUby ruBy r ...

  2. C#中UnixTime和DateTime的转换(转载)

    由于在API请求中返回回来的时间格式为UNIX形式,需要转换成正常的显示方式,在网上找到了这么一个例子. 使用是在C#中使用的,所以WP8开发应该也可以. 转载源地址:http://blog.linu ...

  3. EL函数以及自定义标签的应用

    一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: package cn.wzbril ...

  4. ZeroMQ接口函数之 :zmq_errno – 返回errno的值给调用此函数的线程

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_errno zmq_errno(3)         ØMQ Manual - ØMQ/3.2.5 Name zm ...

  5. 【Alpha】Daily Scrum Meeting第三次

    本次随笔调换了展示顺序,把重要的内容放前面. 一.本次Daily Scrum Meeting主要内容 说明要完成alpha版本还需要哪些功能 对这些功能进行分析和实现方式的讨论 强调编码规范和变量命名 ...

  6. R中一切都是vector

    0.可以说R语言中一切结构体的基础是vector! R中一切都是vector,vecotor的每个component必须类型一致(character,numeric,integer....)!vect ...

  7. easyloader源码

    /** * easyloader - jQuery EasyUI * * Licensed under the GPL: * http://www.gnu.org/licenses/gpl.txt * ...

  8. HDU5769 Substring(后缀数组)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 #include <iostream> #include <stdio.h> ...

  9. jQuery中的事件和动画效果

    刚刚学习了jqyery的一些事件和动画,下面我来总结一下: 1.基础事件 1.window事件,它的对应方法是ready(),$(document).ready()方法是事件模块中最重要的一个函数,可 ...

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

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