一個維護了九年的 Android 外勤 App:Java 與 Kotlin 各半、一個一萬兩千行的 Activity、沒有 DI、沒有測試。這個系列記錄我用 Jetpack Compose 多模組架構把它重寫的 30 天:每天一個真實的架構決定,寫下選項、代價與理由,並附上去識別化的程式碼。主題涵蓋 DI、狀態管理、導航、藍牙硬體抽象、離線上傳佇列,以及可跨產品覆用的 core 模組設計。
動筆前先答(兩題) 1.【決策邊界|UI 與版型】 登入頁的手機號碼欄用系統的電話鍵盤。假設有人提議改成 App 自己畫的數字鍵盤(畫面上固定一組 0–9 的按...
動筆前先答(兩題) 1.【模擬面試追問|取捨與交付】 面試官:「你把公司專案的一部分公開成模板。如果你的主管或法務問:『你怎麼證明裡面沒有公司的東西?』你會怎麼...
動筆前先答(兩題) 1.【預測再驗證|網路與資料】 任務列表的每一筆是一個 JSON 物件,用 kind 欄位表示型別: @Serializable @Json...
動筆前先答(兩題) 答完再往下讀。進文章的答案從這兩題挑;答案寫在「你的回答」下面,寫完自己 commit。 1.【預測再驗證|架構論述】 舊的任務列表把「...
動筆前先答(兩題) 1.【模擬面試追問|持久化與離線】 舊的排序畫面有一個開關:打開時,每放下一筆任務,就把新順序送給後端,後端會重排其他任務再回傳;等待回應的...
動筆前先答(兩題) 1.【決策邊界|架構論述】 舊的任務列表把「怎麼排序、哪些要顯示」的規則寫在一個 1,700 行的 ViewModel 裡。重寫時有三種放法...
動筆前先答(兩題) 1.【模擬面試追問|平台能力】 舊 App 讀 BLE 廣播式磅秤的方式,是用 Handler 排程:開始掃描、10 秒後停止、再重新開始,...
動筆前先答(兩題) 1.【決策邊界|規格與驗收】 BLE 廣播式磅秤不需要配對,只要在範圍內,App 就收得到它的讀值。所以現場如果有兩台以上的秤,App 會同...
動筆前先答(兩題) 1.【模擬面試追問|穩定性與記憶體】 秤重畫面這樣接磅秤的讀值: // ViewModel val reading: StateFlow&l...
動筆前先答(兩題) 1.【決策邊界|平台能力】 舊 App 有 14 個地方要拍照,全部是開系統相機(ACTION_IMAGE_CAPTURE Intent),...