Android-Architecture之todo-mvp

小編發表於2017-02-28

todo-mvp官方地址

#UI層
專案主要實現了4部分功能:

  • Tasks 用於管理任務列表
  • TaskDetails 用於顯示和刪除任務
  • AddEditTask 用於建立和編輯任務
  • Statistics 顯示與任務相關的統計資訊

具體實現

每個功能都是依照如下方式實現:

  • 定義一個連線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層。

架構圖

Android-Architecture之todo-mvp
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只需要實現相關介面,並提供相關服務即可。

Android-Architecture之todo-mvp
Respository.png

如上圖,Repository介面定義了getUserById、getAllUsers等方法,其實現類對介面做具體實現,而真正的操作可能是通過Dao才能訪問資料庫,或者通過Okhttp訪問網路url獲取資料。

回到todo專案中:

  • 介面TasksDataSource 規範運算元據的方法
  • 類TasksRemoteDataSource 實現TasksDataSource 介面,實現真正運算元據的邏輯。
  • 類TasksRepository 實現TasksDataSource介面,持有TasksRemoteDataSource物件呼叫各個方法。
    Android-Architecture之todo-mvp
    Class Diagram.png

Clean架構探討

歡迎交流!

相關文章