在InRule中定义常量或命名值的最佳方法是什么?
我不想要一堆神奇的数字(这些数字很容易被复制)。例如“最低年龄”。我想定义一个命名的常量,我可以用它来代替像21这样的值。
发布于 2016-12-19 01:35:45
有许多不同的方法来处理这个问题。我将概述几个可以解决你问题的一般方法。
考虑到一些设计问题,您可以使用初始化为默认值的字段,这些字段可以通过(从调用应用程序)向规则引擎传递适当的配置数据而被覆盖。
1.计算或初始化实体字段
在实体上创建计算字段,将表达式值设置为所需的常量。随着附加常量的添加和附加根上下文入口点的实现,这并不能很好地扩展。
为了管理这种复杂性的增长,在这种模式上有许多不同的变化,这些变化几乎都来自于Fowler的重构:
2.内联数据表
创建内联表以保存规则使用的这些值和其他常量值。然后,您将查找适当的值(请参阅上文关于不太化规则集的段落,因为这些概念也适用于这里)。
通过适当地构造规则,您可以将问题从“定义常量的最佳方式是什么?”“如何将数据驱动的行为写入规则?”。
讨论并决定配置/const数据类型的位置和所有者是很重要的,它既是业务决策,也是架构决策。
3.定义词汇模板(适用于所有方法)
返回所需常量的表达式模板可以使用户编写如下规则(常量以粗体表示)。
如果申请者低于最低年龄,则将基本分数设置为最低基准分数。
无论您决定什么方法,在所有最简单的场景中,您都应该考虑使用词汇表模板,以方便重用和减少规则作者的摩擦。词汇表之所以伟大,是因为它本质上是一个任意定义、可重用、参数化的函数。它的缺点是,规则必须用BL (业务语言)来编写,才能利用词汇表模板。
例如,如果您决定使用查找表来存储常量,则可以创建一个调用GetMember或TableLookup的表达式模板。您没有强迫用户在所有地方都编写相同的表查找语句,而是将查找逻辑合并到一个中心语句中
https://stackoverflow.com/questions/41166302
复制相似问题