書摘《Implementation Patterns》

更新於 2023/07/31閱讀時間約 4 分鐘
raw-image

這本書在書單中很久了,前陣子有空繞去天龍書局發現有中譯版就買回家來翻翻 (沒錯,買中譯版 XD),一看很合胃口,很快就翻完了,心有戚戚焉的句子很多,特別是在最後一章關於框架設計的部分。

第三章提到三個價值觀:溝通、簡單和靈活,這也是我目前在設計與撰寫程式時考慮的優先順序,我在意的是我寫的這一段程式其他人是否容易看懂?不會刻意去用一些語法讓程式變短,事實上我自己認為讓程式變短不一定讓程式好懂:

程式應該讀起來像一本書一樣。它需要有情節和韻律,句子間應該有優雅的、小小的高低起伏。

所以我在想 Swift 的 method 和參數名稱時,介係詞用的蠻多的,就是希望能讀起來像一般的句子。靈活是放在最後,甚至現在很少想太多了,讓程式簡單好懂先能動,單元測試能過,若遇到真的要改既有的程式時,才開始想怎麼重構讓它變靈活,但也不是什麼都不想,如果知道在不久的未來一定會做的東西,還是會事先規劃一些彈性。

「簡單性和大規模測試所帶來的靈活性」比「專門設計出來的靈活性」更為有效

第五章中提到的很多概念,其實多年研究 Java 的 API 後,自然變成自己的習慣,像是什麼時候用抽象介面,什麼時候用抽象類別,又什麼時候用有版本的介面,那些 method 適合放到 library class,但看過第五章後又有更深的體會了。

Implementation pattern 其實都講些很小的東西,大多是寫程式時,時時要做決定的那種層級的 pattern,像是 delegate 該用什麼方法放入,就有不同的思維,真的很有趣。

將控制流的小片段歸類,讓不想深究的閱讀者先得到一個「抽象的理解」,同時又為需要深入領會的閱讀者提供「更詳盡的細節」。

這大概也是我設計 method 或是將一大段程式切割成數個 method 的原則,並盡量保持 method 顆粒度的一致性的原因了。

它可以告訴閱讀者這段計算的目的何在,讓閱讀者免受實作的影響。閱讀者通常只憑閱讀方法的名稱,就可以一眼分辨出哪些是自己要找的功能。

意圖比實作細節重要,少了意圖,幫忙 code review 的人其實也很辛苦,因為要從實作去猜意圖,但就可能少想到一些該 review 的東西。

呼叫方法是在講述一個故事,好的方法名稱會讓故樹講述得更流暢。

跟我共事過的 Java 工程師可能都知道我不喜歡用 Lombok 這類工具,即便是 getter 和 setter,誰說一定要有,就算有,也不一定是 public,甚至,我還會用 immutable interface 將 getter 和 setter 拆開。

更謹慎地暴露方法,從最嚴格的可見性開始,有必要時才暴露。

書中也提到了我個人很喜歡轉換方法及轉換建構函式,以及一點我個人在看一些目前 Java 第三方套件很愛使用的 builder 時,一直不解的問題:

透過提供無參數的建構函式和一系列 setting方法來建立物件。可以滿足靈活性的要求。不過這種方法無法表達出「物件需要傭有哪些參數組合才能正常運作」。

即便參數可能有點多,要 overloading 多個可省略參數的版本,但我還是偏好建構子,只有特定理由才會使用工廠方法:

工廠方法可以回傳更抽象的類型 (某個子類型或介面的某個實作),還可以根據方法的意圖來命名,不必與類別名稱一致。不過「工廠方法」也增加了複雜性,因為只有在能發揮它們的優勢時,才應該使用「工廠方法」,而不要把「工廠方法」看作是理所當然。

多年前曾在 C.C. Agile 分享過關於重構的一些想法,我還記得那時提到自己寫的 Comic Surfer 有提供 SDK 給第三方寫新的 plug-in,文件建議請繼承 SDK 提供的 abstract class 而不是實作 interface,那時我也是自己思考出來這個方法,因為即使後來 interface 有新增函式,只要在 abstract class 加入合乎邏輯的預設實作,第三方的 plug-in 在不修改程式的情況下,仍然可以在新版本中使用。

框架開發所面臨的挑戰:如何減少不相容的更新所帶來的影響;如何在設計框架時,避免不相容的更新。想要在改進框架時,把對客戶程式碼的影響降到最低,會給框架帶來額外的複雜度,同時需要向客戶隱藏一些特性,而且在做必要的修改時,必須認真仔細地對修改之處進行溝通。

有過這經驗後,一些想法也回到日常的開發中,即便這東西沒有給第三方使用,我依然會想到「責任」與「相容性」問題,這反而讓程式的邊界更清晰,也更好維護。很有意思也很值得推薦的一本書。

Apr 9, 2018

    avatar-img
    53會員
    104內容數
    這是從 Medium 開始的一個專題,主要是想用輕鬆閒談的方式,分享這幾年軟體開發的心得,原本比較侷限於軟體架構,但這幾年的文章不僅限於架構,也聊不少流程相關的心得,所以趁換平台,順勢換成閒談軟體設計。
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    Spirit的沙龍 的其他內容
    每個人成功的方式都不同,其實不需要去追隨誰成功的方式,因為那絕對不會再次在自己身上成功,但如果自己不試著去找適合自己的道路,那就跟很多人一樣:原地踏步。
    每個人成功的方式都不同,其實不需要去追隨誰成功的方式,因為那絕對不會再次在自己身上成功,但如果自己不試著去找適合自己的道路,那就跟很多人一樣:原地踏步。
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    受到疫情的影響,許多企業嘗試遠距工作、在家工作或是混合辦公方式持續維持營運,但疫情逐漸消退後的「後疫情時代」,卻發現員工已回不了辦公室。過去我們的生活是圍繞著工作所建構,例如交通、住屋、生活圈都以工作為考量遷移。然而疫情期間,生活反倒成為了重心,各式工具滿足在生活中工作的需求,人們關注工作生生活
    Thumbnail
    更拚命不會更成功 第一本結合最新績效科學實證 揭開讓你充分發揮實力 同時避免倦怠與過勞的秘密!
    Thumbnail
    你可以思考這句話:人生沒有什麼問題......或許你想要的東西阻擋你看到別的可能性
    Thumbnail
    本書作者Chandler及Grealish長期以來協助非營利組織及跨國企業改善「績效管理」的制度,發現績效管理不彰的重點就在於缺乏回饋。HR除了改善績效管理制度面向外,也應該教育主管使用正確的回饋方式,讓績效管理功能得以發揮。
    Thumbnail
    自從上次看了商業思維學院產品經理Final Pitch後,覺得同學們的報告也太強,不僅透過市場規模了解潛在商機、蒐集需求設計APP原型,或針對現有APP的用戶使用體驗作改善、各個決策的步驟都輔以用戶心理及數據做佐證,讓我不禁懷疑,產品經理平常的工作內容,是什麼養成他們信手拈來跨學科的思考。
    Thumbnail
    管理與領導技巧固然重要,這都是工作技能的一部份。然而真正的教練與頭銜無關。你可以是自己的教練、也可以是同事的教練、朋友的教練。但謹記這些管理叢書的原則是人實踐出來的,而非唯一參照準則。真正重要的是在異化的職場中,不論遭受到多少的批判、掙扎、落在何種困境,你都能在自我對話中保有自己、練習先回到「人性」
    Thumbnail
    在聊這本書前,我想說一個概念,那就是: 「所有主管都是人資主管」 這個概念是我第一份工作時的經理不斷叮嚀我的。那時候公司在推「四角色模型」的專案時,把所有的單位主管都拉進來參加,但有些主管反對、消極應付,有些主管則是很認真地思考策略,定時回復資料。
    Thumbnail
    邁入情緒經濟學 「如果光看交易所裡的價值升降,而不考慮其心理作用,不考慮大眾因企望和沮喪而生的情緒反應,以及引發投機客狂熱的好壞消息如何傳播,那麼這些數字一點意義都沒有。」──塔德 早在行為經濟學盛行前的十九世紀末,社會學家塔德已觀察到許多經濟行為的背後並非理性的算計,而是充滿了許多激情。
    Thumbnail
    「人與人之間的連結」一詞雖然在疫情的脈絡下有種被汙名化的意涵。但是在社會學者的眼中,「人與人之間的連結」—也就是關係,卻是建立團體、組織、社群等群體社會構成的基礎。
    Thumbnail
    將顧客轉換為訂戶(subscriber),以創造經常性收入。稱為「訂閱經濟」(Subsrciption Economy)。
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    受到疫情的影響,許多企業嘗試遠距工作、在家工作或是混合辦公方式持續維持營運,但疫情逐漸消退後的「後疫情時代」,卻發現員工已回不了辦公室。過去我們的生活是圍繞著工作所建構,例如交通、住屋、生活圈都以工作為考量遷移。然而疫情期間,生活反倒成為了重心,各式工具滿足在生活中工作的需求,人們關注工作生生活
    Thumbnail
    更拚命不會更成功 第一本結合最新績效科學實證 揭開讓你充分發揮實力 同時避免倦怠與過勞的秘密!
    Thumbnail
    你可以思考這句話:人生沒有什麼問題......或許你想要的東西阻擋你看到別的可能性
    Thumbnail
    本書作者Chandler及Grealish長期以來協助非營利組織及跨國企業改善「績效管理」的制度,發現績效管理不彰的重點就在於缺乏回饋。HR除了改善績效管理制度面向外,也應該教育主管使用正確的回饋方式,讓績效管理功能得以發揮。
    Thumbnail
    自從上次看了商業思維學院產品經理Final Pitch後,覺得同學們的報告也太強,不僅透過市場規模了解潛在商機、蒐集需求設計APP原型,或針對現有APP的用戶使用體驗作改善、各個決策的步驟都輔以用戶心理及數據做佐證,讓我不禁懷疑,產品經理平常的工作內容,是什麼養成他們信手拈來跨學科的思考。
    Thumbnail
    管理與領導技巧固然重要,這都是工作技能的一部份。然而真正的教練與頭銜無關。你可以是自己的教練、也可以是同事的教練、朋友的教練。但謹記這些管理叢書的原則是人實踐出來的,而非唯一參照準則。真正重要的是在異化的職場中,不論遭受到多少的批判、掙扎、落在何種困境,你都能在自我對話中保有自己、練習先回到「人性」
    Thumbnail
    在聊這本書前,我想說一個概念,那就是: 「所有主管都是人資主管」 這個概念是我第一份工作時的經理不斷叮嚀我的。那時候公司在推「四角色模型」的專案時,把所有的單位主管都拉進來參加,但有些主管反對、消極應付,有些主管則是很認真地思考策略,定時回復資料。
    Thumbnail
    邁入情緒經濟學 「如果光看交易所裡的價值升降,而不考慮其心理作用,不考慮大眾因企望和沮喪而生的情緒反應,以及引發投機客狂熱的好壞消息如何傳播,那麼這些數字一點意義都沒有。」──塔德 早在行為經濟學盛行前的十九世紀末,社會學家塔德已觀察到許多經濟行為的背後並非理性的算計,而是充滿了許多激情。
    Thumbnail
    「人與人之間的連結」一詞雖然在疫情的脈絡下有種被汙名化的意涵。但是在社會學者的眼中,「人與人之間的連結」—也就是關係,卻是建立團體、組織、社群等群體社會構成的基礎。
    Thumbnail
    將顧客轉換為訂戶(subscriber),以創造經常性收入。稱為「訂閱經濟」(Subsrciption Economy)。