什麼是重構?蠻多的文章跟書籍都在討論,每個流派都有自己的觀點。在 面對 Legacy Code ,該重構還是重寫? 文章中,提到蠻多的關於重構還是要重寫的看法,有些觀點跟我自己的想法蠻接近的。已經完成鐵人賽的三分之二部份,覺得是個很好的時機點進行檢視程式碼,在接下來的計畫是想要寫如何上架,而在這過程中不太適合再進行程式碼異動。
是以這個小專案來說,也自我挑戰第 20 天是個好時機。但工作上呢?通常看到一些程式碼有一些壞味道,或是需要調整的部份,會先把他們紀錄下來,若在 Sprint 需要異動或是 Roadmap 有處理到就會跟需求單位提出,以工程師的身份提出要改善將來維護的成本,及提高開發的效率。
列出這樣的清單,除了可以讓團隊成員了解開發生進行重構的項目有多少之外,也可以讓工程師了解有多少的項目需進行。
這次看的重構重點會是:
調整的部份如下
val filmIds = profile.filmIds
val builder = StringBuilder()
builder.append("Films below: ")
if (filmIds.isEmpty()) {
builder.append("No film list.")
} else {
builder.append("\n")
// id starts from 1
filmIds.forEach {
try {
val index = it.toInt() - 1
if (index == -1 || index > filmList.size) {
return
}
builder.append("- ${filmList[index].title}\n")
} catch (exception: Exception) {
Log.e(TAG, exception.message ?: "")
}
}
}
後來想想也許這段產生文字放在 presenter 處理邏輯就好了,讓 view 直接顯示內容就可以了,所以在 view 就變成了:
presenter?.let {
showFilmsPopup(
it.getFilmDisplayString(profile.filmIds)
)
}
連帶著原本 MVP 實做的取得電影 List 的 interface 需要重新命名,不需要把 list 丟回去給 view 處理了。
大家可以點擊那些 commit 的連結看看程式碼異動的過程,這邊分享自己的經驗,就是程式碼異動範圍很大的時候,建議 commit 能夠拆的細一點。甚至一個動作就一個 commit 會對後續 Code Reviewer 友善很多,若將所有的異動都濃縮在同一個 commit ,對方改了什麼沒有任何脈絡可尋。