TODO-MVP 深入浅出

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

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

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

《TODO-MVP 深入浅出》

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

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

《TODO-MVP 深入浅出》 todo-mvp整体包结构

Model :   所属包  data

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

Presenter:  亦所属功能模块包。

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

addTask    添加任务

Tasks       任务列表

TaskDetail   任务详情

Statistics   任务统计

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

《TODO-MVP 深入浅出》 MVP模式讲解

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

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

AddTaskPresenter是控制器。

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

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

《TODO-MVP 深入浅出》 Contract定义M与V协议

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

继续看下一般结构

《TODO-MVP 深入浅出》 四个功能模块

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

《TODO-MVP 深入浅出》 Model示意图

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

Task  :    任务实体类

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

《TODO-MVP 深入浅出》 TaskDataSource( Model 与 Presenter的桥梁)

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

《TODO-MVP 深入浅出》

具体做的工作分给 TaskLocalDataSource 与 TaskRemoteDataSource

local 本地数据源,SQLiteDB形式。

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

         TaskLocalDataSource : 具体提供Model功能

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

《TODO-MVP 深入浅出》 DB协议类(我常用接口来做这件事)

Remote为远程数据源

          TaskRemoteDataSource:   模拟network提供数据源

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

《TODO-MVP 深入浅出》

util :  工具箱

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

《TODO-MVP 深入浅出》

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

《TODO-MVP 深入浅出》 BaseView

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

《TODO-MVP 深入浅出》

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

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

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

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

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

完结

    原文作者:热血沸腾
    原文地址: https://www.jianshu.com/p/bbbff64486e5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞