Android学习笔记---MVP架构系列0x00

MVP(Model-View-Presenter)软件设计架构在Android开发中能够帮助我们将业务逻辑和视图展现解耦,便于代码的维护,达到模块化.这个系列我会带大家完成一个完整的MVP架构的应用,希望大家通过这个系列能到MVP架构有个基本的了解.

MVP具体是如何工作

在我们编码开发时,我们将系统分为数据模型(Model),视图(View),和一个”中间人”(Presenter)三个部分.其中Presenter作为一个”中间人”,它从Model中获取数据,将数据进行相应的处理后将数据交给View进行展示.这样一来,View只需展现数据给用户看,其它的事情它就不用管了,而Model只需完成数据的请求处理,其它的事情它也不用管,Presenter则负责从Model获取数据,通知View进行数据更新.
MVP架构

Android开发中的MVP

首先我们先了解一下各个模块的具体职责:

  • Model
    • 对外提供业务数据的接口
    • 实现数据的存取操作(本地与网络)
    • 只有Presenter可以访问,与View隔离
  • Presenter
    • 持有View对象,可对View进行操作
    • 持有Model提供的数据访问接口
    • 从数据接口中获取数据并处理,更新View
  • View
    • 包含UI的相关组件
    • 持有Presenter对象
    • Presenter负责更新UI 在Android中采用MVP架构可以大大的减轻Activity的职责,下面我将采用一个简单的例子来介绍一下MVP在Android开发中是如何使用的.
      我们使用豆瓣的电影Top250来进行讲解,为简单起见,我们使用用Retrofit进行网络数据的请求,使用Glide进行图片加载.如果对RetrofitGlide的使用不了解的话,可以看一下我的另外两篇文章:
      Android学习笔记—开源工具Retrofit的基本使用
      Android学习笔记—开源工具Glide的基本使用

准备工作

  1. 数据准备
    我们的数据是来自豆瓣电影Top250的API,请求的URL如下:

    https://api.douban.com/v2/movie/top250?start=0&count=10

    其中start表示从电影起始的下标,count表示要获取电影的数量.

  2. 依赖配置
    我们的项目的Gradle依赖配置如下:
    app/build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'android-apt'
    android {
        compileSdkVersion 23
        buildToolsVersion "24.0.0 rc3"
    
    defaultConfig {
        applicationId "com.source.kevin.doubantop250"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile 'com.android.support:appcompat-v7:23.4.0'
        compile 'com.github.bumptech.glide:glide:3.7.0'
        compile 'com.squareup.retrofit2:retrofit:2.1.0'
        compile 'com.squareup.retrofit2:converter-gson:2.1.0'
        compile 'com.android.support:recyclerview-v7:23.4.0'
        compile 'com.android.support:cardview-v7:23.4.0'
        compile 'com.jakewharton:butterknife:8.0.1'
        apt 'com.jakewharton:butterknife-compiler:8.0.1'
    }
    

    项目根目录下的build.gradle:

    buildscript {
        repositories {
        mavenCentral()
        jcenter()
        }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        }
    }
    allprojects {
        repositories {
            jcenter()
        }
    }
    repositories{
        mavenLocal()
        mavenCentral()
    }
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    
  3. 界面设计
    我们最后完成的界面是一个瀑布流的电影图片与标题的一个主界面,因为我是边写代码边写博客的,所以App的界面效果还没法给大家展示,但我们最后的界面会类似下面的壁纸应用效果图:
    效果图

所有的准备工作都做好了,下次我们会把项目的MVP架构搭建起来.