专栏首页代码男人Android MVP模式 入门

Android MVP模式 入门

1.前言

   近些年来,Android架构模式有很多,我们比较熟知的有MVC,MVP以及MVVM,目前Android市场中使用最多的应该是MVP架构,虽然MVVM结合DataBing看似更加方便,但在一般公司中使用的还是比较少。其实模式这种东西就像我们个人习惯,觉得代码怎么放置会更方便,慢慢的就形成了一种标准化的模式,好的代码模式更容易后期维护与团队分工合作,但是其实说句心里话,刚接触这些模式的时候,感觉代码的类变多了,但是从逻辑上着实简洁了很多。建议还是稳中求实,不要为了架构而架构。

2.MVP和MVC相比

    毋庸置疑的是,每种模式架构都有自己的优缺点,在这里借用弘扬大神的两句话

  • View:对应于布局文件
  • Model:业务逻辑和实体模型
  • Controllor:对应于Activity

看起来的确像那么回事,但是细细的想想这个View对应于布局文件,其实能做的事情特别少,实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,造成了Activity既像View又像Controller(当然了Data-Binder的出现,可能会让View更像View吧)。

而MVP的出现,是的view层不能和Model层直接交互,Presenter作为中间的桥梁,连接view和model,将view和model完全解耦,使得Activity代码不再臃肿。

3.以请求服务端登录为例

   学习过很多前辈的文章,讲解mvc模式时,基本都是使用登录为例,但是几乎都是使用本地数据模拟,所以相信很多人都有同一个疑问,网络请求部分的代码到底交给谁来做,Model?还是Presenter?呢。用户登录时,对于View层我们要定义View层的接口,也就是activity(或fragment,一下统称activity)的状态有哪些变化,

  首先,用户点击登录要获取用户输入的用户名和密码,弹出正在登录,从服务端返回信息,toast弹出,dialog关闭,所以我们需要定义view层的这五种状态接口。

对于Model层,需要有用户登录的方法,传入用户名和密码(map),和回调接口。

该例子中使用的是自己封装的Volley框架,封装如下:(稍候会有源码给出)

activity请求登录时,直接通过Presenter操作,所以我们Presenter实现方法中有login方法,直接调用view层的接口和model的接口去实现。

而在view层,也就是对应的activity中只需要继承view层的接口,通过Presenter去操作其中的方法即可。

这样,实现一个网络请求判断用户登录,在view中的代码,就变得简洁多了,便于我们后期对代码的维护。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EventBus源码解析

      相信大家已经非常熟练的使用EventBus了,简单的说EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事...

    黄林晴
  • 详解Android View的事件体系 之View基础(一)

    掌握View的事件体系是Android 向高级迈向的必经之路,本片博客讲解Android View的相关基础知识第一部分,后面我们会为大家讲解基础知识第二部分、...

    黄林晴
  • Java连接MnogoDb数据库

    添加:mongo-java-driver-3.2.2.jar   驱动地址:http://central.maven.org/maven2/org/mongod...

    黄林晴
  • 如何写出让同事无法维护的代码?

    译文:http://coolshell.cn/articles/4758.html

    CSDN技术头条
  • 如何写出无法维护的代码

    总之,我们的口号是—— Write Everywhere, Read Nowhere

    框架师
  • 如何写出无法维护的代码

    单字母的变量名。比如:a,b,c, x,y,z(如果不够用,可以考虑a1,a2,a3,a4,….)

    冯杰宁
  • leetcode 14 | 最长公共前缀

    分析:找到数组中长度最小的元素min(从后面更快的例子来看,这个好像不需要~),然后从min的第一字符开始,去查找剩余元素是否在相同位置是同一个字符。

    ACM算法日常
  • Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"...

    coders
  • 国内首款AI显微镜获NMPA批准,将应用于病理检测

    雷锋网AI掘金志消息,近日,腾讯 AI Lab 和业舜宇光学科技、第三方医学检验机构金域医学共同宣布,三方联合研发的智能显微镜获得 NMPA 注册证,成为国内首...

    AI掘金志
  • 使用 Prism.js 实现漂亮的代码语法高亮

    沈唁

扫码关注云+社区

领取腾讯云代金券