iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
Software Development

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

Day 29|回顧:模組依賴圖、指標、沒做到的事

  • 分享至 

  • xImage
  •  

動筆前先答(兩題)

1.【預測再驗證|架構論述】 Day 02 畫過一張目標模組圖,並定了一條規則:「core 之間只能依賴 core:common」。現在 repo 裡有十幾個 Gradle 模組。下面每一小題都先寫預測和依據,再跑指令驗證。

  1. 不看任何 build.gradle.kts,畫出目前專案模組之間的依賴圖,每條邊標明是 api、implementation,還是只在測試時用到。接著回答:

    • 哪個模組被最多模組直接依賴?
    • 有沒有 feature 依賴另一個 feature?
    • 有沒有 core 模組違反 Day 02 那條規則?
    • 這些邊有多少是你在 build.gradle.kts 裡親手寫的,有多少是 convention plugin 幫你加的?

    驗證:./gradlew :app:dependencies --configuration devDebugRuntimeClasspath,加上讀 build-logic。

  2. 拿這張圖跟 Day 02 的目標圖比:多了哪些模組、少了哪些、哪條邊的方向跟當初畫的不一樣?每個差異,是計畫改了,還是實作偏了?當時的理由要去哪裡查?

  3. 重編的漣漪。下面三種改動,分別預測 ./gradlew :app:assembleDevDebug 會重跑哪些模組的 Kotlin 編譯:

    • 在 core:common 改一行 internal 函式的實作。
    • 在 core:common 改一個 public 函式的簽章。
    • 在 feature:login 改一行。

    驗證:每次改完都加 --console=plain 跑一次,數出不是 UP-TO-DATE 的 compile…Kotlin 任務,跑完還原。api 和 implementation 會讓這三個答案差多少?

  4. 指標。每一項先寫預測,再寫你會用什麼指令量:

    • 新專案最長的 Kotlin 檔有幾行、在哪個模組?舊 App 最長的 Activity 是一萬兩千行。
    • 測試函式總共有幾個?測試碼行數跟正式碼行數的比例是多少?
    • ./gradlew koverHtmlReportUnit 的行覆蓋率,最高和最低的各是哪個模組、大約多少?
    • clean build assembleDevDebug 要幾秒?上面第 3 小題的增量建置又要幾秒?

    量完以後,挑出跟預測差最多的那一項:你原本的理解錯在哪裡?

  5. 這些數字裡,你會把哪幾個寫進文章?哪幾個看起來漂亮,其實什麼都說明不了?挑一個你願意每週追蹤的指標,說出它變差時你會做什麼。

最後回答:這張圖和這些數字,哪一個能證明「重寫之後比較好維護」,哪一個證明不了?

我的回答:(待補)

2.【模擬面試追問|取捨與交付】 路線圖排了 30 天。Day 01–12 有對應的程式碼,也打了 day-NN tag。從 Day 13 起,大綱只有開頭兩題,路線圖上的 feature 都還沒寫,包括任務列表、磅秤、拍照上傳、掃描、地圖、定位、交接。

這段時間的程式碼花在路線圖以外:

  • 回頭逐條審查 Day 03–12 的既有測試。
  • 加上診斷紀錄的寫檔與匯出。
  • 建立一套流程:core 機制先寫成紅燈測試,作者看過才實作。

設計文件的待辦清單累積到三十幾條,其中有幾條要後端改。

面試官看完你的系列,不看下面的大綱,依序追問:

  1. 「你的系列寫到 Day 30,程式碼停在 Day 12。」你怎麼在三十秒內講清楚現況,既不誇大也不自貶?Day 13–28 的文章,讀者要怎麼分辨哪些是做過、驗證過的決定,哪些只是還沒驗證的設計?完整版的 AI 使用說明寫「新專案的程式碼已在專案中建置並通過測試」。對還沒有程式碼的那幾篇,這句話還成立嗎?要怎麼改才屬實?
  2. 時程:「Day 13 趕不上」的第一個訊號是什麼時候出現的?你當時怎麼處理:延後 feature、照寫文章,還是砍範圍?這個決定是誰拍板的、記在哪裡?如果重來,你會在哪一天、用什麼條件觸發裁切?
  3. 路線圖以外的那三件事。面試官問:「這些是必要的,還是你在逃避難的 feature?」你拿什麼證據回答?例如它抓到過什麼錯、擋下過什麼錯誤決定,或省下之後多少時間。拿不出證據的那一件,你願意承認什麼?
  4. 三十幾條待辦,分成三堆:「上線前一定要做」「可以帶著上線」「不是 App 的事」。每堆各舉一條,並說出你的判準。面試官再問:「哪一條最可能在上線後變成事故?」你選哪一條,為什麼?
  5. 「程式碼都是 AI 寫的,那你做了什麼?」你會拿什麼給面試官看?git 歷史、決定紀錄、你答的題目、你拍板過的測試……哪一項最能證明那是你的判斷?哪一項其實證明不了?

最後用三句話寫「沒做到的事」:沒做到什麼、為什麼沒做到、你打算怎麼處理(做、不做,還是交給誰)。

我的回答:(待補)


上一篇
Day 28|雙方握手的狀態機
下一篇
Day 30|下一步:剩餘畫面的遷移策略
系列文
從 Fragment 到 Compose — 老 Android App 重寫的架構取捨 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言