美文网首页
Google MVP Demo学习心得

Google MVP Demo学习心得

作者: MrTrying | 来源:发表于2018-08-28 17:36 被阅读90次
image.png

MVP模式通过presenter隔离了View和Model两个模块之间的交互,实现View和Model完全解耦。

  • Model:数据
  • View:视图
  • Presenter:控制中心
image.png

在Google的MVP的demo中有BaseView和BasePresenter两个基础接口,具体的业务去实现具体的行为接口,其中还有一个Contract接口,作为链接View和PreSenter两个模块的一种写法。

/**其中泛型T表示presenter的类型*/
public interface BaseView<T>{
}

public interface BasePresenter{
    //入口方法
    void start();
}

分析一下TasksContract,可以大概了解Presenter中都是对应的数据操作行为,View中都是对应的UI操作行为。程序中并没有TasksContract的具体实现,它的存在就是关联一个页面的Presenter和View的作用。

public interface TasksContract{
    interface Presenter extends BasePresenter{
        //数据操作行为方法
    }
    interface View extends BaseView<Presenter>{
        //UI操作行为方法
    }
}

数据这块Demo中处理的相对复杂,每个业务数据Model都是有一个对应的package目录中的文件。在数据模块中有一个TasksDataSource的接口,其中定义了一系列与数据源交互的行为,例如:获取数据、更新、删除等等。

在Googlde的框架图中可一看到,在数据这块区分了Local和Remote两个数据来源,并且在模块对外输出的出口TasksRepository还使用一层内存cache,来实现三级缓存的形式。TasksLocalDataSource、TasksRemoteDataSource、TasksRepository都是实现的TasksDataSource接口,并且都是单例;其中TasksRepository作为唯一的出入口。

在具体实现的Presenter的构造函数中传入对应的View对象以及Repository对象,以此来达到Presenter结合View和Model的作用。

这里基本就明白了

  • View做UI交互
  • Model相对复杂,底层以DataSource操作数据,再使用Repository作为数据的出入口
  • Presenter则是负责统一流程,去调度View和Model分别控制UI响应和数据响应

再看一下Demo的文件目录结构,帮助理解

相关文章

网友评论

      本文标题:Google MVP Demo学习心得

      本文链接:https://www.haomeiwen.com/subject/bhpqwftx.html