Android todo-mvp
来源:互联网 发布:餐饮排队叫号软件 编辑:程序博客网 时间:2024/05/18 12:34
一点对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请求。
- 【android-architecture】todo-mvp
- Android todo-mvp
- Android-Architecture之todo-mvp
- Android Todo MVP 框架分析和例子
- Google 的android-architecture,todo-mvp解析
- android-architecture学习——todo‑mvp
- TODO-MVP源码解析
- 理解 todo-mvp-clean
- Google官方MVP示例之TODO-MVP
- Google官方MVP示例之TODO-MVP
- todo-mvp-clean简化版本
- Android 官方示例:android-architecture 学习笔记(二)之todo-mvp
- Android 官方示例:android-architecture 学习笔记(三)之todo-mvp-loaders
- Android 官方示例:android-architecture 学习笔记(五)之todo-mvp-clean
- Android 官方示例:android-architecture 学习笔记(六)之todo-mvp-contentproviders
- Android官方TODO-MVP项目分析(上)---View 层 Presenter 层以及 Contract 分析
- Google TODO-MVP-Loaders 简要分析
- 从google的todo学习MVP
- (Android开发)ADB被占用,服务(Service)不能开启等情况记录与解决办法
- 参数化 ${参数名}
- C++易错知识点更新
- Linux下JDK、Tomcat的安装及配置
- Android权限问题整理
- Android todo-mvp
- Not supported by zabbix agent 问题解决
- spring的@Transactional详解
- Java-Spring Ioc 理解
- 素数环
- dos命令 设置环境变量
- window相关
- Linux:安装eclipse并添加到启动栏
- Activator