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層。
架構圖
項目中包含了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只需要實現相關接口,并提供相關服務即可。
如上圖,Repository接口定義了getUserById、getAllUsers等方法,其實現類對接口做具體實現,而真正的操作可能是通過Dao才能訪問數據庫,或者通過Okhttp訪問網絡url獲取數據。
回到todo項目中:
- 接口TasksDataSource 規范操作數據的方法
- 類TasksRemoteDataSource 實現TasksDataSource 接口,實現真正操作數據的邏輯。
-
類TasksRepository 實現TasksDataSource接口,持有TasksRemoteDataSource對象調用各個方法。
Class Diagram.png
歡迎交流!
Clean架構探討