iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
Software Development

從 Fragment 到 Compose — 老 Android App 重寫的架構取捨系列 第 2

Day 02|目標架構總覽:分層、模組圖、依賴方向

  • 分享至 

  • xImage
  •  

今天的取捨問題

昨天決定另開 repo 重寫。第一個要回答的問題不是「用什麼函式庫」,而是:程式碼要怎麼切,才能同時滿足三件事?

  1. 30 天內要交出能在真實硬體上跑的骨架與 7 個流程(速度)。
  2. 網路、藍牙秤、相機上傳這些「平台能力」要能給第二個產品線直接用(覆用)。
  3. 每篇文章要能附上一段不含任何業務資訊的程式碼(可公開)。

三件事其實指向同一個答案:把「產品無關」與「產品專屬」在模組層級分開,而不是靠 package 命名自律。

選項與代價

選項 做法 優點 代價
A. 單一模組 + package 分層 ui/ data/ di/ 三個 package,靠 code review 守邊界 最快上手;建置設定最少 邊界靠自律,三個月後一定破;抽出公開範例要手動挑檔案;跨產品覆用等於複製貼上
B. 多模組,依「技術層」切 :ui :domain :data 三個模組 依賴方向清楚 每加一個功能要動三個模組;:ui 會再度長成 God module;平台能力(藍牙、相機)沒有自然的家
C. 多模組,依「功能 + 平台能力」切 appfeature:*datacore:* 功能可獨立編譯與測試;core 天生產品無關;抽公開範例 = 複製 core/ 建置設定前期投資約一天;模組數多,需要 convention plugin 管理

什麼是模組?

假設,我的 App 想要有登入、首頁、帳戶設定頁 3 頁。
我的根目錄先這樣切分資料夾結構:
-login
-home
-account

我已把程式碼用資料夾分類,這樣是否能稱作我的專案已模組化了?

不是。因為僅僅把程式碼分類,並無法形成模組邊界。
也就是說,在沒模組邊界。的情況下,打包腳本不會認定上述的三個資料夾是個別的獨立元件。

分類方式 作用
資料夾 整理檔案
package 整理命名空間
module 控制依賴與可見範圍

最簡單的一句話是:

資料夾是在分類程式碼;模組是在隔離程式碼。

package 是在表達 Class、檔案的結構,讓程式碼更佳的組織化及利於搜尋。


上一篇
Day 01|為什麼重寫:一個一萬兩千行 Activity 的診斷書
下一篇
Day 03|建置骨架:多模組、version catalog、convention plugin,以及 secrets 為什麼不能再進 git
系列文
從 Fragment 到 Compose — 老 Android App 重寫的架構取捨5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言