Android todo-mvp

一点对google官方的todo-mvp的理解

首先定义了三个接口:
BaseView : View接口
BasePresenter : Presenter接口
TasksDataSource : Model接口

这里写图片描述

public interface BaseView<T>{
    void setPresenter(T presenter);
}
public interface BasePresenter{
    void start();
}
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 GetTaskCallback callbaxk);
}

另外为了让View 和 Presenter 容易理解另外加了一个辅助接口、

public interface TasksContract{
    interface View extends BaseView<Presenter>{

    }

    interface Presenter extends BasePresenter{

    }
}

注:
与常规MVP不同的地方:
Model为所有Presenter共用。(在官方的示例中Model为TasksRepository)
Activity不是作为V来使用,而是用来管理作为V的fragment和Presenter
Presenter 的start()方法在View(TasksFragment)中的Resume()方法中被调用。

在Presenter的实现类TasksPresenter的构造函数里面
实现Presenter与View和Model的关联
并实现View 与 Presenter的关联

而Presenter的创建在TasksActivity
即Presenter在TasksActivity创建对象的时候实现 :
Presenter与View和Model的关联
View 与 Presenter的关联

    public TasksPresenter(@NotNull TasksRepository tasksRepository , @NotNull TasksContract.View tasksView){
        mTasksRepository = checkNotNull(tasksRepository, "tasksRepository Cannot be null");
        mTaskView = checkNotNull(tasksView,"tasksView Cannot be null");
        mTaskView.setPresenter(this);
    }

//这里好像并没有Model与Presenter的关联
//MVP把业务逻辑代码全部移到了Presenter中,所以Model不需要与Presenter关联,也是因此Model可以被多个Presenter共用。
//如果在这里让Model 与 Presenter 相关联,那么Presenter只是起到接口转发的作用,就与MVC无太大差异。

再来看看Model

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 GetTaskCallback callbaxk);
}

在官方的示例中Model的最顶层接口是TasksDataSource。
TasksDataSource中提供两个给Presenter回调的接口,并提供了调用的方法。

TasksDataSource的具体实现类是TasksRepository,TasksLocalDataSource,TaskRemoteDataSource。
其中TasksRepository又与TasksLocalDataSource,TaskRemoteDataSource关联。
TasksLocalDataSource,TaskRemoteDataSource分别表示本地数据操作,如数据库,文件操作和远程操作如http请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值