開放封閉原則與規則引擎設計模式 - devgenius
SOLID原則是美國軟體工程師和講師羅伯特·C·馬丁 (Robert C Martin) 提倡的眾多原則的一個子集,他被稱為“鮑勃大叔”。在本文中,我將討論S {O} LID原則之一,即開閉原則(OCP)。
我會使用 C# 來演示程式碼,但 OCP 與語言無關。
OCP的官方定義是:
軟體實體(類、模組、函式等)應該對擴充套件開放,對修改關閉。
OCP 的好處
OCP 推薦的做法可以輕鬆升級軟體應用程式。想象一個 WhatsApp 想要擴充套件聊天服務以向 Facebook Messenger 傳送訊息的用例。
開發人員希望重用聊天服務的相關元件。有兩種方法可以做到這一點。
- 修改現有聊天服務以支援新要求。它會將聊天服務程式碼暴露給錯誤。聊天服務的複雜性會增加,自動化測試用例可能會失敗。
- 使用相關元件擴充套件聊天服務程式碼。為支援新功能而編寫的程式碼將採用新類的形式,但將從聊天服務的核心功能中受益。這種方法的好處是可以獨立部署和測試新功能。
規則引擎設計模式是遵守 OCP 的眾多方法之一。許多其他設計模式允許我們遵循 OCP,但我將本次會議限制為規則引擎設計模式,這是展示 OCP 功能的最簡單方法之一。
規則引擎
幫助開發人員遵循 OCP 的流行設計模式之一是規則引擎設計模式。開發具有處理同一實體的多個複雜業務規則的軟體應用程式是一種有效的設計模式。
業務規則可能是相關的和複雜的。可能涉及很多複雜的分支和條件邏輯。遵循 OCP 將使開發人員能夠獨立新增、刪除或禁用業務結果。
規則引擎有兩個元件:
- 規則引擎 — 對實體執行所有規則以產生結果的引擎。
- 業務規則——規則定義處理邏輯或條件。
稅務計算器
讓我們嘗試為稅收計算器應用程式實現規則引擎設計模式。稅收計算是一個複雜的過程,取決於許多因素,如年齡、總收入、居民身份等。許多業務規則評估這些因素以確定稅額。政府政策推動了這些業務規則,並且可以經常更改它們。在這個用例中,我將使用規則引擎設計模式來保持這些業務規則的獨立性。
完整的程式碼可以在https://github.com/tarunbhatt9784/TaxCalculator.git
相關文章
- 設計原則之【開放封閉原則】
- 《JavaScript設計模式與開發實踐》原則篇(3)—— 開放-封閉原則JavaScript設計模式
- Observer觀察者模式與OCP開放-封閉原則Server模式
- 面象物件設計6大原則之二:開放封閉原則物件
- 嘻哈說:開放封閉原則
- 設計原則:開閉原則(OCP)
- 設計模式六大原則(六)----開閉原則設計模式
- 設計模式的七大原則(5) --開閉原則設計模式
- Laravel深入學習9 – 開放封閉原則Laravel
- 編碼最佳實踐——開放封閉原則
- 設計模式之開閉原則:對修改關閉,對擴充套件開放設計模式套件
- 開閉原則——物件導向程式設計原則物件程式設計
- S.O.I.L.D 之開放封閉原則
- OCP原則——開閉原則
- 規則引擎模式 - upperdine模式
- 七大軟體設計原則之一 | 開閉原則
- 設計原則 設計模式設計模式
- 【設計模式】設計原則設計模式
- 設計模式 - 設計原則設計模式
- 開放封閉原則:打造更強大的軟體架構架構
- 《JavaScript設計模式與開發實踐》原則篇(2)—— 最少知識原則JavaScript設計模式
- 開閉原則
- 設計模式的設計原則設計模式
- 設計模式例項講解 - 開放封閉設計模式
- 《JavaScript設計模式與開發實踐》原則篇(1)—— 單一職責原則JavaScript設計模式
- 設計模式 基本規範與基本原則設計模式
- JavaScript設計模式(一)設計原則JavaScript設計模式
- Javascript 設計模式之設計原則JavaScript設計模式
- 設計模式(06)——設計原則(1)設計模式
- 設計模式(07)——設計原則(2)設計模式
- 開閉原則OCP與KISS簡單原則衝突嗎? - macerubMac
- 設計模式 #1(7大設計原則)設計模式
- C# 設計模式(0)——設計原則C#設計模式
- 設計模式六大設計原則設計模式
- 設計模式-六大設計原則設計模式
- C++設計模式的原則C++設計模式
- 設計模式:介面隔離原則設計模式
- 設計模式 -- 設計模式七大原則設計模式