开放封闭原则与规则引擎设计模式 - devgenius


SOLID原则是美国软件工程师和讲师罗伯特·C·马丁 (Robert C Martin) 提倡的众多原则的一个子集,他被称为“鲍勃大叔”。在本文中,我将讨论S {O} LID原则之一,即开闭原则(OCP)。
我会使用 C# 来演示代码,但 OCP 与语言无关。
OCP的官方定义是:
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
 
OCP 的好处
OCP 推荐的做法可以轻松升级软件应用程序。想象一个 WhatsApp 想要扩展聊天服务以向 Facebook Messenger 发送消息的用例。
开发人员希望重用聊天服务的相关组件。有两种方法可以做到这一点。

  1. 修改现有聊天服务以支持新要求。它会将聊天服务代码暴露给错误。聊天服务的复杂性会增加,自动化测试用例可能会失败。
  2. 使用相关组件扩展聊天服务代码。为支持新功能而编写的代码将采用新类的形式,但将从聊天服务的核心功能中受益。这种方法的好处是可以独立部署和测试新功能。

规则引擎设计模式是遵守 OCP 的众多方法之一。许多其他设计模式允许我们遵循 OCP,但我将本次会议限制为规则引擎设计模式,这是展示 OCP 功能的最简单方法之一。
 
规则引擎
帮助开发人员遵循 OCP 的流行设计模式之一是规则引擎设计模式。开发具有处理同一实体的多个复杂业务规则的软件应用程序是一种有效的设计模式。
业务规则可能是相关的和复杂的。可能涉及很多复杂的分支和条件逻辑。遵循 OCP 将使开发人员能够独立添加、删除或禁用业务结果。

规则引擎有两个组件:
  1. 规则引擎 — 对实体执行所有规则以产生结果的引擎。
  2. 业务规则——规则定义处理逻辑或条件。

 税务计算器
让我们尝试为税收计算器应用程序实现规则引擎设计模式。税收计算是一个复杂的过程,取决于许多因素,如年龄、总收入、居民身份等。许多业务规则评估这些因素以确定税额。政府政策推动了这些业务规则,并且可以经常更改它们。在这个用例中,我将使用规则引擎设计模式来保持这些业务规则的独立性。
完整的代码可以在https://github.com/tarunbhatt9784/TaxCalculator.git