[Android] Architecture: Organizing modules & Entities — MAD Skills(5/5)
這是介紹 Architecture 的最後一篇。想看第四篇 Domain Layer 的請服用:
Organizing modules
在大型項目中,使用 Modules 來組織,可以分離各個功能的職責、避免合併衝突、提高程式碼的可重用性及可測試性,並優化 dependency graph 來達成加快 build 的時間。
那該怎麼劃分 module 呢?
可以將專案劃分為 Feature modules
、Library modules
和 App modules
。
每個 Feature module 都包含一個單獨且獨立的 Feature,可以依賴 Library modules,但不可以依賴其他的 Feature module。
每個 Library module 都包含可以被多個 Feature modules 重用的程式碼,例如共用的 UI Components 或是 Logging,而且 Library module 可以依賴其他Library modules,但不可以依賴 Feature modules 或 App modules。
App module 負責將所有的內容連接再一起,並可以依賴 Feature modules 和 Library modules。
我們可以把一個單獨且獨立的 Feature 拆分出來製作成一個 Feature module,例如登入模組
、付款模組
或購物車模組
。每個 Feature module 可以依賴 Library modules,但不可以依賴其他的 Feature module。
我們可以把多個 Feature modules 都有使用的相同程式碼,拆分出來製作成Library module,例如共用的 UI Components
或是 Logging
。每個 Library module 可以依賴其他 Library modules,但不可以依賴 Feature modules 或 App modules。
App module 依賴 Feature modules 和 Library modules,負責將所有的內容連接再一起。
Entities
在專案中,每一個 architecture layers 所需要的資料並不相同,而且都有各自的職責,也就是每一層都要創建一個或多個獨立的 Entities。而這麼做可以獲得乾淨且可擴展的 model architecture。
Entities 大致上可以拆分成以下四種 Remote Entities
、Database Entities
、Domain Entities
和 UI State
。
- Remote Entities:來自 server 或網路 api json 響應的 Entities
- Database Entities:表示來自 Database 的 Entities
- Domain Entities:表示來自 Domain Layer 的 Entities,也就是業務邏輯的 models
- UI State:顯示畫面需要使用到的狀態或資料