TODO-MVP 深入浅出

作者: 热血沸腾 | 来源:发表于2017-02-08 13:01 被阅读674次

转载请说明出处 http://www.jianshu.com/p/bbbff64486e5

该工程是谷歌官方推荐学习MVP应该熟悉的项目Github官方地址 

看下Gif吧,从视觉上感受下。

声明:本文提供的图片,为防止有人感觉不适,部分地方打码  :-)

项目本身做的事情非常简单,四大模块,添加任务,任务列表,任务详情,统计列表。但该项目写的非常标准,并且我看到了很多好玩的东西,开发者需要熟练掌握,想学好这几个方面还得下足功夫。我会单独标注,整体包结构(示意图标注直观清晰表达):

todo-mvp整体包结构

Model :   所属包  data

View : 所属为每个功能模块包。 (我们通常会这样创建包结构,比如这里添加任务模块,里面就包含了以Fragment做为的View)

Presenter:  亦所属功能模块包。

再提一次,该工程有四大功能

addTask    添加任务

Tasks       任务列表

TaskDetail   任务详情

Statistics   任务统计

我之所以打开AddTask,是因为展示View和Presenter这个结构最纯粹,最具代表性。再来熟悉一下MVP 原文地址

MVP模式讲解

View与Presenter可以双向通信,协议是Interface实现,以Contract命名结尾的。比如AddTask包下的 AddTaskContract

AddTaskActivity是创建Fragment与Presenter的。用Fragment做为View(Activity也可以)是因为更加纯粹,有时我们也不用严格去这么做。

AddTaskPresenter是控制器。

我们首先学会了通过类名来区分每个角色,这样学习其他功能,比如任务列表,任务详情,统计信息模块,是完全一样的。看下图:

AddTaskContract 协议,定义View与Model的需求、功能,来看

Contract定义M与V协议

好处是功能清晰,维护简单,方便管理

继续看下一般结构

四个功能模块

好了,View与Presenter讲清楚了,现在开始讲Model。Model略微复杂,你看看嘛

Model示意图

我所理解的Model不仅对外提供数据,并且定义数据类型。

Task  :    任务实体类

          TasksDataSource: 是Model与对外暴露的协议,让他人知道Model可以提供哪些功能

TaskDataSource( Model 与 Presenter的桥梁)

       TaskRepository: 真正实现TaskDataSource接口的类。来看张类图

具体做的工作分给 TaskLocalDataSource 与 TaskRemoteDataSource

local 本地数据源,SQLiteDB形式。

         TaskDbHelper : 看后缀DbHelper肯定是帮助类,用于记录的增删改查的

         TaskLocalDataSource : 具体提供Model功能

          TasksPersistenceContract:定义DB中一些常量,如表字段 如图

DB协议类(我常用接口来做这件事)

Remote为远程数据源

          TaskRemoteDataSource:   模拟network提供数据源

OK,截至到现在,该工程的MVP角色我都讲了,源码具体实现,感兴趣的可以去官网下载。本人也大概浏览了一下,翻译了一些注释。无奈没找到简书上传文件功能,无法分享了。如果真的很需要请入Q群并注明 473930845  最纯粹的技术交流群体

util :  工具箱

BasePrsenter : 基础Presenter,只有一个方法start(),并且这个方法是在Fragment的onResume()中调用的,其实就一个作用,告诉Presenter,Fragment开始工作了,View对用户可以见了, 你可以做一些业务动作了。所以,我们也可以灵活的根据需求,当Fragment对用户不可见时,通知Presenter。

BaseView :只有一个方法 setPresenter(T presenter) 看名字就知道了,拿到Presenter引用,用于     V - >  P 的指令

BaseView

那么如果  p -> V 的指令想要发送, 一定是Presenter拿到View的引用,怎么拿?“创建Presenter的时候把当前View传递过去”  简单暴力。 看代码

Activity作为View与Presenter的管理者,很适合这个工作。但我看过很多MVP工程,包括我自己的,把Activity作为View

好的,到目前为止,整个项目的架构讲解完成,做到了先整体再局部。

接下来我们看一些有意思的实现(这可是GoogleSample)值得借鉴的,我会放在另外几篇文章中,因为具有通用性

1.   MVP好在于分层测试,这个项目中有单元测试,UI测试。基于本项目学习下

2.  .gradle脚本的配置 技巧。 基于本项目学习下

完结

相关文章

  • TODO-MVP 深入浅出

    转载请说明出处 http://www.jianshu.com/p/bbbff64486e5 该工程是谷歌官方推荐学...

  • Google官方android架构todo-mvp(译)

    todo-mvp架构项目地址 todo-mvp 这个app版本被称作todo-mvp,给这个工程的其他示例提供一个...

  • GOOGLE TODO-MVP 学习笔记

    GOOGLE TODO-MVP 学习笔记 背景(可忽略):《GOOGLE TODO-MVP 学习笔记》这篇文章主要...

  • GoogleSamples MVP 中文文档 README

    todo-mvp 这个版本的应用叫做todo-mvp , 并为项目中的其他实例提供依据。这个实例旨在: 在不使用任...

  • todo-mvp

    todo-mvp 当前版本的app叫做 todo-mvp,为该 github 项目中的其他示例提供了一个基础。样本...

  • TODO-MVP

    由上图可知,项目分层1个app目录,4个测试目录app目录分为: 4个测试目录分别是:androidTest: U...

  • 002.MVP

    Android Architecture Blueprints 学习之 TODO-MVP(一) - 推酷 谷歌官方...

  • androd-architecture(架构)

    项目地址 googlesamples/android-architecture todo-MVP 该版本的应用程...

  • MVP学习

    本文主要学习google开源代码TODO-MVP 地址 https://github.com/googlesamp...

  • android-architecture之todo-mvp源码分

    博文出处:android-architecture之todo-mvp源码分析,欢迎大家关注我的博客,谢谢! And...

网友评论

    本文标题:TODO-MVP 深入浅出

    本文链接:https://www.haomeiwen.com/subject/kesmittx.html