先上官方源代码:
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。
网友评论