DEV Community

Cover image for [太長;不看... EP1] Android App Architecture 基本盤
Lettucech
Lettucech

Posted on

[太長;不看... EP1] Android App Architecture 基本盤

到底在說什麼?

Android App Architecture,俗一點就是把各file分好職責,安放在合理的package內。即使個人project也建議應用,對project管理絕對有利。這裡已預設大家會使用MVVM或MVI pattern,如果不是的話...

meme

為什麼需要?

  • 職責清晰。界面不對找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
Enter fullscreen mode Exit fullscreen mode

必需遵守clean architecture的原則,否則破功

允許的關係只有:

  • MainActivity -> ui/*
  • MainActivity -> domain/*
  • MainActivity -> data/*
  • ui/* -> domain/*
  • data/* -> domain/*

結尾

現在,參照提供的例子,試想像一下當中每一個module是如何跟其他module溝通。它們的角色又是負責了什麼?看看自己有沒有真正理解好architecture!

Top comments (0)