概述
项目地址https://github.com/googlesamples/android-architecture.git
git分支: todo-mvp
分析基础代码
在一个基础架构里,定义baseView,basePresenter,针对具体的一个业务逻辑可以把分别扩展了baseView和basePresenter的两个接口组合成一个业务接口;这样就可以实现面对接口编程;
baseView接口的方法 setPresenter(T presenter);
basePresenter接口的方法 void start();
- AddEditTaskContract接口:
public interface AddEditTaskContract {
interface View extends BaseView<Presenter> {
void showEmptyTaskError();
void showTasksList();
void setTitle(String title);
void setDescription(String description);
boolean isActive();
}
interface Presenter extends BasePresenter {
void saveTask(String title, String description);
void populateTask();
boolean isDataMissing();
}
}
分析这个合约类的定义,显然view和presenter的复用并不是首要的考虑点,这么设计我分析是为了封装添加TodoTask这个业务需求,内部的view接口implements 基类view时,范型的参数类型用了Presenter,这也是很巧妙的一个地方,因为Presenter也定义在合约类接口内部,所以同一个合约类内部的view使用的Presenter默认也是合约类内部的Presenter。
使用方法:
一般是用fragment实现特定合约的view接口,在Activity里初始化fragment,然后构造对应合约的presenter;把fragmebt作为合约的view传入presenter的构造器,presenter的构造器里会调用view的setPresenter方法,这样view 和presenter实际上是双向的引用;
尽管view接口知道presenter的存在,presenter接口不知道view的存在,但是在实现presenter时,明显是持有了view的引用;这样view和presenter还是耦合在一起的;
单元测试:
- 测试view
- 测试presenter
最后
以上就是兴奋大雁为你收集整理的学习android-architecture之mvp的全部内容,希望文章能够帮你解决学习android-architecture之mvp所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复