---
# System prepended metadata

title: '[Video Note] [Android] [Module] Philipp Lackner - Don''t Do These Fatal Mistakes With a Multi-Module Architecture'
tags: [Module, Android, Video Note]

---

# 模組化概念與優點

- 模組化可以加快 Gradle 構建速度，因為每個模組可以獨立構建，並且只有更改的模組才會重新構建。
- 模組化能夠提高團隊協作效率，讓不同團隊專注於不同模組，避免互相影響。
- 模組化提供更清晰的內容分離，讓開發者只能使用指定模組的代碼。
- 模組化允許模組重用，例如可以在另一個專案中重用現有的功能模組。

# 錯誤一：過早或過快地模組化

- 不要在專案一開始就進行模組化，這樣會浪費大量時間配置 Gradle 文件和依賴關係。
- 對於小型專案，模組化帶來的構建時間優勢不明顯，甚至可以忽略。
- 應先從單一模組開始，隨著專案規模增大或構建時間增加，再考慮引入多模組架構。
- 將單一模組中的包視為真實模組，以便日後輕鬆遷移到多模組架構。

# 錯誤二：基於層級的模組化

- 基於層級的模組化，如將 Data、Domain、Presentation 作為根模組，是錯誤的做法。
- 這種策略會導致每次構建時，大多數模組都需要重新構建，無法有效加快構建速度。
- 基於層級的模組化無法實現團隊間的有效協作，因為模組之間的相互依賴性過高。
- 這種策略也削弱了模組重用性，因為很難單獨重用整個層級模組中的代碼。

# 正確的模組化策略

- 應採用基於功能的模組化策略，即每個功能作為一個模組，並在模組內根據層級進行劃分。
- 這樣的模組化策略能確保只有更改的功能模組需要重新構建，提高構建效率。
- 更容易分配團隊任務，各團隊可以專注於各自的功能模組，避免互相影響。
- 也能提高模組重用性，可以輕鬆將功能模組移植到其他專案中使用。


# Terminology
- **Modularizing**：將應用程式分成多個獨立的模組，每個模組負責不同的功能或層級。
- **Multi-module architecture**：一種架構設計，將應用程式拆分成多個模組，有助於提高可維護性、團隊合作以及構建速度。
- **Gradle build**：Android 使用的構建系統，負責編譯代碼和生成 APK 文件。
- **Module**：一個獨立的代碼單元，通常包含某個特定功能的實現。
- **Core module**：核心模組，包含應用程式的基本功能或邏輯。
- **Core UI module**：核心 UI 模組，處理應用程式的核心使用者界面元素。
- **Onboarding module**：用於新用戶導入的模組，通常包含註冊或初次使用的相關功能。
- **Tracker module**：用於追蹤或紀錄數據的模組，例如卡路里追蹤器。
- **Work delegation**：工作委派，將不同的任務分配給不同的團隊或人員。
- **Layer-based modularization**：根據功能層級（如數據層、業務層、展示層）來模組化應用程式的一種策略。
- **Package by layer**：將代碼按層級（如數據層、業務邏輯層、展示層）組織在不同的包中。
- **Feature-based modularization**：根據應用程式的特定功能來模組化，而非根據層級來劃分。
- **Reusability**：代碼重用性，指在其他項目中再次使用模組或代碼的能力。
- **Presentation layer**：展示層，負責用戶界面和用戶交互的代碼部分。
- **Domain layer**：業務邏輯層，負責應用程式的核心邏輯和業務規則。
- **Data layer**：數據層，負責數據管理、網絡請求和數據庫操作的代碼部分。
- **Shameless self promo**：一種自我推銷的方式，通常在不太正經的情況下使用。
- **CI/CD**：持續整合和持續部署，指的是一套自動化的開發實踐，用於持續測試、整合和部署代碼。