歡迎來到我的專注於 Golang 的 SOLID 原則係列的第一部分!本系列將剖析每個 SOLID 設計原則,引導您創建更具可維護性和可擴展性的 Go 應用程式。 我們從單一職責原則(SRP)開始——這是一個基石概念,強調透過確保每個模組處理單一任務來實現更簡潔的程式碼。 ?
單一職責原則規定:
一個類別、模組或函數應該只有一個改變的理由。
本質上,每個組件都應該專注於單一職責。 多任務程式碼變得難以在不引入錯誤的情況下維護和擴展。 遵守 SRP 可以提高模組化、可重複使用性和可測試性。
考慮一家繁忙的餐廳。 確保顧客滿意度的兩個關鍵角色:
想像一個人同時扮演這兩個角色。廚師暫停烹飪以接受訂單會:
這種場景效率低;一個人同時處理不相關的任務會導致混亂。
遵循單一責任原則:
這種分離讓每個人都能在自己的特定角色中發揮出色,從而帶來更有效率、更積極的用餐體驗。 ?✨
與餐廳範例類似,您的程式碼應該建構類別和函數來只處理一項職責。這增強了可維護性,加速了變更並最大限度地減少了錯誤。
讓我們看看違反 SRP 如何建立脆弱且難以管理的程式碼。
考慮一個基本的咖啡店訂單管理系統:
<code>package main import "fmt" // Order stores coffee order details. type Order struct { CustomerName string CoffeeType string Price float64 } // ProcessOrder handles multiple responsibilities. func (o *Order) ProcessOrder() { // Handles payment processing fmt.Printf("Processing payment of $%.2f for %s\n", o.Price, o.CustomerName) // Prints receipt fmt.Printf("Receipt:\nCustomer: %s\nCoffee: %s\nAmount: $%.2f\n", o.CustomerName, o.CoffeeType, o.Price) } func main() { order := Order{CustomerName: "John Doe", CoffeeType: "Cappuccino", Price: 4.50} order.ProcessOrder() }</code>
Order
結構處理資料儲存、支付處理和收據列印 – 明顯違反 SRP。修改任何方面都會影響ProcessOrder
,阻礙可維護性。
讓我們將職責分成不同的組件:
<code>package main import "fmt" // Order stores coffee order details. type Order struct { CustomerName string CoffeeType string Price float64 } // ProcessOrder handles multiple responsibilities. func (o *Order) ProcessOrder() { // Handles payment processing fmt.Printf("Processing payment of $%.2f for %s\n", o.Price, o.CustomerName) // Prints receipt fmt.Printf("Receipt:\nCustomer: %s\nCoffee: %s\nAmount: $%.2f\n", o.CustomerName, o.CoffeeType, o.Price) } func main() { order := Order{CustomerName: "John Doe", CoffeeType: "Cappuccino", Price: 4.50} order.ProcessOrder() }</code>
Order
儲存資料; PaymentProcessor
處理付款; ReceiptPrinter
產生收據。 PaymentProcessor
和 ReceiptPrinter
可以獨立測試。 辨識違規行為,例如:
單一職責原則簡化了程式碼理解、維護和擴充。 這只是開始! 本系列的下一篇文章將探討 SOLID 中的「O」:開閉原則。
您也可以探索我之前關於依賴注入的文章,這是一種重要的 OOP 技術。
編碼愉快! ?
追蹤我以獲取未來貼文的更新:
以上是Golang - 廚師和服務生如何教導單一責任原則的詳細內容。更多資訊請關注PHP中文網其他相關文章!