美文网首页
Google官方MVP项目小结

Google官方MVP项目小结

作者: LaoLee | 来源:发表于2016-04-16 20:28 被阅读209次

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 完成数据展示

相关文章

网友评论

      本文标题:Google官方MVP项目小结

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