谷歌官方MVP Contract浅解

先上官方源代码:

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<Presenter> {
        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。

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

推荐阅读更多精彩内容