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架構探討

歡迎交流!

相關文章
相關標籤/搜索