-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Labels
enhancementNew feature or requestNew feature or requestgood first issueGood for newcomersGood for newcomers
Description
In GitLab by @in_in_mm on Oct 28, 2020, 22:10
前言
規劃專案重構的思路。
因為當前迫切的需求是在 github open source ,所以第一階段目標是能讓其他人能夠協作為優先。
以下是大概的重構思路,有 highlight 的是必須要做的,其他則是有空時可以慢慢改。
Detail
-
整理專案:統一專案風格、刪除個人訊息
調整專案配置
:刪除多餘的檔案,整理 git 、 gradle 等 config 的設定格式化
:reformat 程式碼並加入一些基本的 lint ,規則以 google 的 coding style 為準- 變更程式語言:從 Java 換成 Kotlin
- CI:檢查程式碼是否符合規範
-
抽象化:之後專案會以 MVVM 為目標,但須先將專案的 controller 及資料層的公開方法介面化
定義 scope
:專案大致會先分成View
、ViewModel
、Repository
ISP
:將大的 interface 切割成單一職責的小模塊控制反轉
:把 class 依賴的 interface 改成建構子注入- 測試:加入 unit test 或是整合測試
- DI:後續根據切割後的子組件決定是否有必要加入 DI 的概念
-
其他:這些是可做可不做,或是需要邊做邊想的事情
非同步調用
:要想一下這個專案的實作方式,主流大概有 Callback、RxJava、Coroutines、(LiveData) 等 Select a concurrency design pattern to simplify code that executes asynchronously #13可以調整成:
UI <-> ViewModel 使用 LiveData
ViewModel <-> 使用 CallbackThread Handle
:整理執行緒的調用方式,最好可以用 thread pool 之類的方式集中處理Error Handle
:錯誤處理的機制- API:okhttp、retrofit?
database:有需要改成 Room 之類的嗎?因為需要存的 local 資料不多,可以考慮用 android keystore- 專案模組化:讓後續開發時可以更針對功能去開發,同時加強專案編譯效能
- 圖片框架考慮替換成 Glide
Discussion
重構會分成幾個階段,第一階段會先 整理專案。
第二階段初步抽象化後,改為由下往上開發,從最底層的資料層重構,先建立一個 MVVM 結構。
- 整理專案 Config
- reformat 並加入 lint check (git hook)
- 根據 UI 提出的功能分割出 ViewModel & Open Source to GitHub
- 各層級抽象化
- 資料層根據資料類型分成 local 資料或是網路資料
- 可以加入 Repository 的概念,整合資料層
- (後續重構的想法可以在這裡提出)
Appendix
以下是之前 slack 整理的專案可能會用到技術選型或是套件 (感謝 @chrisynchen 整理)
Networking:
- retrofit2 + OKHttp3
- Volley
ImageLoader:
- Glide
- Picasso
- coil
Architecture:
- MVP
- MVVM
Async work:
- rxjava2
- coroutines
DI:
- dagger2
- koin
- Hilt
CI/CD:
- travis
- circle ci
- GitHub Action
Test libs:
- Power mock
- Mockito
- MockK
- Google trust
- MockWebServer
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestgood first issueGood for newcomersGood for newcomers