到底在說什麼?
Android App Architecture,俗一點就是把各file分好職責,安放在合理的package內。即使個人project也建議應用,對project管理絕對有利。這裡已預設大家會使用MVVM或MVI pattern,如果不是的話...
為什麼需要?
- 職責清晰。界面不對找UI,資料不對找repository。
- 有利多人同時開發
- 有利testing/mocking。
API還未上線也能開發。🥲 - 跟modularization相輔相乘
Project裡有什麼?
UI Layer
| 名稱 | 說明 |
|---|---|
| UI | 泛指View/Fragment/Activity/Composable等等。在Android世界,也有部份充當controller的角色。 |
| View Model | 管理state,執行business logic,從repository等等存取UI需要的資料。 |
Domain Layer
| 名稱 | 說明 |
|---|---|
| Model | 定義物件。如果App自己沒有很強的獨立世界觀,一般會跟services共用。 |
| Use Case | 提供封裝好的business logic,供不同的view model重用。 |
| Repository | 根據business需要,從service等存取資料。 |
Data Layer
| 名稱 | 說明 |
|---|---|
| Service | 觸發API,存取database/cache等等。 |
具體的例子呢?
src/
├── MainActivity (coordinate all layers to make app works)
├── ui/
│ ├── CheckoutScreen
│ └── CheckoutViewModel
├── domain/
│ ├── Cart (model)
│ ├── CartRepository (interface)
│ └── CalculateTotalAmountUseCase
└── data/
├── RemoteCartRepository (implementation)
└── OrderService
必需遵守clean architecture的原則,否則破功
允許的關係只有:
-
MainActivity->ui/* -
MainActivity->domain/* -
MainActivity->data/* -
ui/*->domain/* -
data/*->domain/*
結尾
現在,參照提供的例子,試想像一下當中每一個module是如何跟其他module溝通。它們的角色又是負責了什麼?看看自己有沒有真正理解好architecture!

Top comments (0)