Android-Architecture之todo-mvp

todo-mvp官方地址android

#UI层
项目主要实现了4部分功能:git

  • Tasks 用于管理任务列表
  • TaskDetails 用于显示和删除任务
  • AddEditTask 用于建立和编辑任务
  • Statistics 显示与任务相关的统计信息

具体实现

每一个功能都是依照以下方式实现:github

  • 定义一个链接View和Presenter的契约类Contract
  • 建立一个Presenter,并实现契约类中的Presenter接口
  • Activity中实例化Fragment和Presenter。
  • Fragment中实现BaseView接口

A presenter typically hosts business logic associated with a particular feature, and the corresponding view handles the Android UI work. The view contains almost no logic; it converts the presenter's commands to UI actions, and listens for user actions, which are then passed to the presenter.数据库

Presenter一般托管这与特定功能相关的业务逻辑,响应的View层处理Android UI工做。视图层几乎不包含逻辑;视图层把Presenter层中的命令转化为UI操做,并且视图层去监听用户的操做,传递给Presenter层。网络

架构图

mvp.png

项目中包含了Presenter,Repository和DataSource,实现层与层之间的解耦,同时方便单元测试。架构

按照Android-CleanArchitecture架构图来讲,这里只包含了Presentation Layer和Data Layer两层,并未包含Domain Layer。其依赖规则是只能上层依赖下层。单元测试

Data层

App须要的数据都是经过Data层中的Repository模块提供,由它去完成访问网络和数据库等。测试

使用Repository将业务层与具体的查询逻辑分离,Repository的实现类主要职责就是存储查询数据,一个更简单的解释就是你能够把Repository的实现类当成是一个Java容器(Collections),能够从中获取或存储数据(add/remove/etc),他对数据源进行了抽象。Data层的Repository只须要实现相关接口,并提供相关服务便可。google

Respository.png

如上图,Repository接口定义了getUserById、getAllUsers等方法,其实现类对接口作具体实现,而真正的操做多是经过Dao才能访问数据库,或者经过Okhttp访问网络url获取数据。url

回到todo项目中:

  • 接口TasksDataSource 规范操做数据的方法
  • 类TasksRemoteDataSource 实现TasksDataSource 接口,实现真正操做数据的逻辑。
  • 类TasksRepository 实现TasksDataSource接口,持有TasksRemoteDataSource对象调用各个方法。
    Class Diagram.png

Clean架构探讨

欢迎交流!

相关文章
相关标签/搜索