决策表模式: 一种业务规则引擎实现方式

决策表是业务逻辑建模的表格形式,表示所有可能的条件组合。特别是在复杂的系统中,当多个业务规则共享同一组属性时,可以使用决策表轻松映射所有场景。

决策表具有用于映射条件及其操作的列和行。因此,可以使用不同的条件和操作来构建每个业务规则,而不会丢失所有可能的组合。

为了进一步解释所有组合,让我们考虑一个根据学生的分数、年龄和州/地区确定奖学金百分比的场景。

这些是属性集和每个属性的可能值数量。

if score >= 80 and
age >= 18 and
states and territories is VIC
then
scholarship percentage is 80

我们可以使用上表中的相同属性和可能值对场景上下文进行建模。
 
传统手工方法
软件开发人员使用编程语言将逻辑写入应用程序是传统方法。这可能会导致大型项目以及扩展项目中的多个问题。

传统方法    

  • 需要特定编程语言的知识    
  • 它是代码库的一部分,使得在不影响代码库的情况下更难进行更改    
  • 难以理解复杂的场景    
  • 很难映射场景的所有组合并对其进行测试    
  • 领域专家和业务分析师无法根据业务规则的变化更新代码    
  • 很容易错过所有可能的组合,因为它们是以句子的形式写的    

决策表

  • 不需要编程语言
  • 与应用程序代码库分离,使得在不影响代码库的情况下更容易进行更改
  • 复杂的场景可以很容易地以表格的形式进行映射。
  • 所有组合都可以以表格形式映射并一一测试
  • 无需编码,领域专家和业务分析师可以根据业务规则的变化更新代码
  • 所有可能的组合都可以轻松建模,因为有表格形式的可视化表示

决策表模式只能表达简单业务规则吗?
这个问题的答案是坚决不!尽管决策表的简单性以及它们如何轻松地让您对业务规则进行建模,但这并不意味着它仅适用于简单的业务规则。

决策表允许对非常复杂的业务规则进行建模,同时它们看起来简单且易于理解。决策表支持复杂的条件和规则输入。这将允许在单元格中输入不同类型的值,例如范围、常量和文字值以及公式和表达式。

另一方面,您可以在条件列中组合复杂的布尔运算符。此外,使用框式表达式构建和重用复杂表达式作为条件或操作列的一部分,将允许您将任何复杂逻辑简单地放入任何决策表的结构化模型中。

在所有这些之上,决策表允许在设计时进行语义和结构验证,这将使您能够了解您是否拥有正确和完整的决策表。

当处理复杂数据时,即关系和数据集合作为条件列的一部分,一元运算符将允许您处理任何与数据相关的复杂逻辑。