《清潔代碼》第 12 章,標題為“出現”,探討瞭如何透過遵守基本設計原則來產生清潔、結構良好的軟體。
軟體設計中的湧現是指從簡單、易於理解的規則中產生複雜行為或功能的過程。
遵循這些規則可以幫助開發人員製作易於維護、擴展和理解的軟體。
本章重點在於簡單設計的四個規則,強調簡潔性和可測試性,以實現乾淨高效的程式碼。
讓我們分解這些規則,看看它們如何使用 JavaScript 應用。
乾淨、緊急的軟體的基礎是它必須具有功能性。
所有程式碼都應通過測試,確保保留預期行為並且新功能不會引入錯誤。
在 JavaScript 中,這通常是透過使用 Jest 或 Mocha 等函式庫編寫單元測試來實現的。
function add(a, b) { return a b; } // Test (using Jest) test('adds 1 2 to equal 3', () => { expect(add(1, 2)).toBe(3); });
透過確保軟體通過所有測試,您就可以保證系統能如預期運作。
乾淨的程式碼始於可靠的測試。沒有這個,其他規則都不重要。
代碼應該傳達它的作用。命名良好的函數、變數和類別可以使您的程式碼易於閱讀和理解,而無需註釋。
揭示其意圖的代碼是不言自明的。
錯誤命名:
function d(x) { return x * 2; }
好的命名:
function doubleNumber(number) { return number * 2; }
在這種情況下,doubleNumber()清楚地揭示了該函數的意圖。
任何閱讀此程式碼的人都可以立即理解其目的,而無需額外解釋。
這種做法不僅減少了混亂,還提高了可維護性。
程式碼重複是乾淨軟體的最大敵人之一。重複的邏輯可能會導致錯誤並增加維護工作量。
目標是透過將常見行為抽象化為可重複使用的函數或模組來減少冗餘。
代碼重複:
function calculateAreaOfSquare(side) { return side * side; } function calculateAreaOfRectangle(length, width) { return length * width; }
兩個函數都在進行類似的計算。透過重構,我們可以消除重複。
無重複:
function calculateArea(shape) { if (shape.type === 'square') { return shape.side * shape.side; } else if (shape.type === 'rectangle') { return shape.length * shape.width; } }
透過函數的泛化,我們消除了重複的邏輯,使程式碼更易於維護。
簡單設計的最後一條規則鼓勵在不犧牲清晰度的情況下最大限度地減少類別和方法的數量。
這意味著避免不必要的複雜性。
每個類別或功能都應有明確且集中的職責,遵守單一職責原則 (SRP)。
方法太多:
class User { constructor(name) { this.name = name; } getName() { return this.name; } setName(name) { this.name = name; } printWelcomeMessage() { console.log(`Welcome, ${this.name}!`); } // Additional unrelated methods getUserProfile() { // ... some logic } logActivity() { // ... some logic } }
這個類的職責太多了。它應該只專注於管理用戶名。
重構:
class User { constructor(name) { this.name = name; } getName() { return this.name; } setName(name) { this.name = name; } } class Logger { static logActivity(user) { // ... some logic console.log(`${user.getName()} performed an activity.`); } }
透過分離關注點,程式碼變得更簡單且更易於維護。
現在,每個類別都有單一的職責,秉持著極簡主義和簡單性的原則。
簡單設計的四個規則——透過所有測試、揭示意圖、消除重複以及最小化類別和方法的數量——指導創建乾淨、可維護和緊急的程式碼。
透過遵循這些原則,複雜性得到控制,並且您的程式碼變得更能適應變化。
快樂編碼!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3