谷歌官方MVP Contract浅解

先上官方源代码:

谷歌官方MVP Contract浅解_第1张图片
Todo-MVP

可以看到官方MVP代码的包结构,是根据业务来划分,每个包里边都有一个MVP结构。Activity+Fragment相当于View,Presenter用来连接View和Model。

关于Model,官方例子里的Model是按照数据源分为Local和Remote,常见的Local数据包括Database、File、SharedPreference,Remote就是从网络存取数据。

官方例子里有个Contract比较有意思,这个接口将V和P放在一起,以及它们所有的方法,先看一下其中一个Contract的源码:

public interface TaskDetailContract {
    interface View extends BaseView {
        void setLoadingIndicator(boolean active);
        void showMissingTask();
        void hideTitle();
        void showTitle(String title);
        void hideDescription();
        void showDescription(String description);
        void showCompletionStatus(boolean complete);
        void showEditTask(String taskId);
        void showTaskDeleted();
        void showTaskMarkedComplete();
        void showTaskMarkedActive();
        boolean isActive();
    }

    interface Presenter extends BasePresenter {
        void editTask();
        void deleteTask();
        void completeTask();
        void activateTask();
    }
}

每个Contract里边都定义了不同的View和Presenter接口,从整体看代码逻辑比较清楚。

关于Contract,如果APP的每个页面逻辑相差不多的话,Contract是可以去掉的。可以让Activity可以继承同一个BaseActivity(Fragment同理),BaseActivity实现一个IActivity接口,将Presenter调用Activity的方法都写在这个接口里。而所有的Presenter都实现一个BasePresenter,然后在BasePresenter里引用IActivity。

你可能感兴趣的:(谷歌官方MVP Contract浅解)