SOLID 是電腦程式設計中五個良好原則(規則)的縮寫。 SOLID 允許程式設計師編寫更易於理解和稍後更改的程式碼。 SOLID 通常與使用物件導向設計的系統一起使用。
讓我們使用車輛範例來解釋 SOLID 原理。想像一下,我們正在設計一個系統來管理不同類型的車輛,例如汽車和電動車,以提供運輸服務。
車輛範例:假設您有一輛汽車。它負責駕駛,但不應該負責處理自己的維護(例如換油或輪胎旋轉)。相反,由一個單獨的機械師負責。
解釋:在我們的程式碼中,Vehicle類別應該只處理與車輛本身相關的事情,例如儲存它的品牌和型號。如果我們需要管理維護,我們會為此建立一個單獨的維護類別。這樣,每個類別都有一個工作或職責,使程式碼更易於管理。
class Vehicle def initialize(make, model) @make = make @model = model end end class Maintenance def initialize(vehicle) @vehicle = vehicle end def perform_maintenance puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}" end end
車輛範例:假設您有一輛基本型汽車,現在您想在系統中添加一輛電動車。您不必修改現有的汽車類別即可添加電動車的功能。相反,您可以透過建立新的電動車類來擴展現有功能。
說明:Vehicle類別對擴展開放(您可以創建新類型的車輛,例如ElectricVehicle),但對修改封閉(您不需要更改Vehicle類別本身來添加新類型)。
class Vehicle def initialize(make, model) @make = make @model = model end def description "#{@make} #{@model}" end end class ElectricVehicleL - 里氏替換原理 (LSP)
車輛範例:假設您有一支車隊,並且您可以毫無問題地用電動車替換任何普通汽車。兩者都應該能夠在不破壞系統的情況下執行其基本功能 - 駕駛 - 。
解釋:任何子類別(如 ElectricVehicle)都應該能夠替換其父類別(Vehicle)而不改變程式的行為。這確保了我們的程式碼可以以相同的方式處理不同類型的車輛。class Vehicle def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicleI - 介面隔離原則(ISP)
車輛範例:假設您有不同類型的車輛:有些可以充電(如電動車),有些只能駕駛(如汽油車)。您不希望汽油車必須處理與充電相關的方法。
解釋:類別應該只實作它們需要的介面(或行為)。例如,電動車輛可能同時實現可駕駛和可充電接口,而常規車輛僅實現可駕駛。module Drivable def drive raise NotImplementedError, "This #{self.class} cannot drive" end end module Chargeable def charge raise NotImplementedError, "This #{self.class} cannot be charged" end end class Vehicle include Drivable def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicleD - 依賴倒置原理(DIP)
車輛範例:想像一輛汽車可以有不同類型的引擎:燃氣引擎或電動引擎。汽車不應直接依賴特定的引擎類型,而應依賴更通用的引擎接口,以便它可以使用任何類型的引擎。
解釋:高級模組(如車輛)不應依賴低級模組(如 GasEngine 或 ElectricEngine)。兩者都應該依賴抽象(如引擎介面)。這使得系統更加靈活並且更容易更改。class Engine def start raise NotImplementedError, "This #{self.class} cannot start" end end class GasEngine透過遵循此車輛範例中的 SOLID 原則,我們可以建立一個易於維護、擴展和適應新要求的系統。
領英:https://www.linkedin.com/in/anandsoni11/
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3