Google官方MVP项目小结

1、Github地址:https://github.com/googlesamples/android-architecture

里面有几个项目,这里下载的 todo-mvp 是比较基础的项目。

效果图

2、项目结构

项目结构

这里先不管它们都是干嘛的,通过观察发现包下都包含这几类:
xxxActivity,
xxxFragment,
xxxContract,
xxxPresenter。
所以这个项目应该是按照不同界面来组织的。

其中xxxActivity,xxxFragment就是MVP中的V,xxxPresenter就是MVP中的P了。xxxContract是什么呢?以addedittask包下的AddEditTaskContract.java为例看下代码

public interface AddEditTaskContract {

    interface View extends BaseView<Presenter> {

        void showEmptyTaskError();

        void showTasksList();

        ...
    }

    interface Presenter extends BasePresenter {

        void createTask(String title, String description);

        void updateTask( String title, String description);

        ...
    }
}

是一个接口,里面又定义了两个接口,并分别继承了BaseView类和BasePersenter类

BaseView类

public interface BaseView<T> {

    void setPresenter(T presenter);    
}

BasePersenter类

public interface BasePresenter {

    void start();

}

那么View和Persenter又被谁实现了呢?
Persenter毫无疑问是被XXXPersenter实现了,View是不是XXXActivity实现了呢?不是的,BaseView被XXXFragment实现了,而XXXActivity是负责创建XXXFragment和XXXPersenter,并将它们联系起来的。

最后是MVP的M了,它在项目的data包下

M

其中Task.java是存放数据的实体类,
TasksDataSource是个接口,里面有定义了两个接口,用来和Personter联系。

TasksDataSource

public interface TasksDataSource {

    interface LoadTasksCallback {

        void onTasksLoaded(List<Task> tasks);

        void onDataNotAvailable();
    }

    interface GetTaskCallback {

        void onTaskLoaded(Task task);

        void onDataNotAvailable();
    }

    void getTasks(@NonNull LoadTasksCallback callback);

    void getTask(@NonNull String taskId, @NonNull GetTaskCallback callback);
    
    ...
}

TasksRepository实现了TasksDataSource,负责处理 Task 数据。

public class TasksRepository implements TasksDataSource {

    ...

}

小结

这个项目的结构就差不多完了,流程分为这几步
1.Activity 将分别实现了 Persenter 和 View 的 XXXPersonter 和 XXXFragment 联系起来。
2.Persenter 通过 TasksDataSource 内的接口和 TasksRepository 联系起来。
3.XXXFragment触发点击事件,调用XXXPersenter 方法,XXXPersenter处理业务逻辑(例如效果图第二步,要判断Title或内容是否为空),XXXPersonter再通过 TasksReoisitory 将数据存入 Task中。
4.TasksReoisitory 通过回调再将 Task 数据 返回给 XXXPersenter,XXXPersenter 再专递给 XXXFragment 完成数据展示

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,985评论 25 708
  • 人笨学的慢啊。。抓紧学习MVP 网上MVP的学习资料也是多如牛毛,来看看谷歌爸爸是怎么教我们MVP的吧 项目介绍 ...
    hongjay阅读 2,698评论 1 21
  • 我知道这是一个不公平的时代,但庆幸的是,我们有一个公平的事还能去做,那就是去读书,去学习。抓住一切时间和机会去学习...
    水木的小院阅读 300评论 0 4
  • 文笔训练营课4 【要点】1、阻碍文笔流畅的三个bug:的的不休、字音重复、单双音偏废。2、四象限 作业 1. 对对...
    舒亦卷阅读 189评论 4 1
  • 昨天看过了张化桥老师的《影子银行内幕,下一个次贷危机的源头?》感触颇多。影子银行并不仅仅指地下钱庄,而是包括除了银...
    胖主任阅读 456评论 0 0