預重構:極致抽象、極致分離、極致可讀 封面

預重構:極致抽象、極致分離、極致可讀

👨‍💼: Ken Pugh
📅: September 8, 2005
Buy Now
📖:
以「在動手前先設計」為主軸,把 Refactoring 的事後修正前移成設計判斷,並圍繞極致抽象、極致關注點分離、極致可讀三大原則,提出可跨語言套用的開發指南(guidelines)。本書榮獲 2006 年 Jolt 獎。
📘 深度概覽

作者背景#

Ken Pugh 是擁有四十餘年軟體實務經驗的資深顧問,自 1982 年起擔任 Pugh-Killeen Associates 的主理顧問,後擔任 Net Objectives 的 Fellow Consultant,專注於敏捷流程(agile process)、物件導向設計與軟體安全。他同時也是 SAFe(Scaled Agile Framework)Agile Software Engineering 課程的共同創造者,長期在國際敏捷研討會擔任講者與培訓師。Pugh 的主要著作除本書《Prefactoring: Extreme Abstraction, Extreme Separation, Extreme Readability》(2005)外,另有《Lean-Agile Acceptance Test-Driven Development: Better Software Through Collaboration》(2010)。本書於 2006 年榮獲 Jolt Award,被認為「開啟了關於軟體設計的全新論述」,他在書中以資深從業者身分,將多年累積的設計直覺與專案教訓提煉為可流通的書面指南。

完整摘要#

本書回應一個常見痛點:團隊往往要等到專案已具規模,才回頭以重構(refactoring)改善內部結構,付出昂貴的代價。Pugh 主張把這份「事後修正」前移為「預重構」(prefactoring)——在動手前,先把自己與他人在過往專案中累積的經驗,轉化為當下的設計判斷。書名雖呼應 Martin Fowler 的《Refactoring》,意涵卻相反:問題前置處理,而非事後補救。

全書圍繞三個被刻意推到極致的原則展開,與 Extreme Programming 的精神同源。第一是「極致抽象」(Extreme Abstraction),主張用抽象資料型別(Abstract Data Types, ADT)取代原始型別建模,例如以 Dollar、Count、Percentage、ZipCode 取代 double 與 String,避免在程式中遺失語意。第二是「極致關注點分離」(Extreme Separation of Concerns),把資料、持久化、GUI、業務規則拆到不同類別,降低耦合。第三是「極致可讀」(Extreme Readability),讓客戶或業主都能讀懂程式碼,使其貼近需求陳述。

論述以一個虛構的 Sam CD 出租店為主線,從需求訪談、命名澄清(CDDisc/CDRelease)、群聚(Clumping)相同結構的資料、第一次釋出,到加入信用卡、多店與報表等新需求,逐章示範指南如何在實作壓力下被應用。書中刻意不稱這些建議為「設計模式」或「最佳實踐」,而稱「指南」(guidelines),並附上唯一鐵律:脈絡決定一切(Context Is Everything)。結語把預重構收束為三個日常習慣:動手前先問三個變動軸問題、每次釋出後做小型回顧、預重構與重構互為輪替。

本書的貢獻與定位#

在 Refactoring 與 Design Patterns 已成主流的 2005 年,本書填補的是「設計直覺如何在動手前被書寫下來」的空白。相較於 Fowler 的 Refactoring 聚焦事後改造、《Design Patterns》(GoF)提供標準解,本書以較鬆散的「指南」形式,鼓勵讀者比對自身脈絡再取捨,並透過附錄 A 把所有指南條列為團隊可直接帶走的檢核表。主要讀者是已具備物件導向基礎、UML 閱讀能力,並至少熟悉一種 OO 語言(Java、C++、C#、Ruby、Python)的中階開發者與技術主管,適合作為團隊工程指南、設計評審與新人帶領的參考文件。