学习android-architecture之mvp

项目地址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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值