首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义常量或命名值的最佳方法

定义常量或命名值的最佳方法
EN

Stack Overflow用户
提问于 2016-12-15 14:14:10
回答 1查看 152关注 0票数 3

在InRule中定义常量或命名值的最佳方法是什么?

我不想要一堆神奇的数字(这些数字很容易被复制)。例如“最低年龄”。我想定义一个命名的常量,我可以用它来代替像21这样的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 01:35:45

有许多不同的方法来处理这个问题。我将概述几个可以解决你问题的一般方法。

考虑到一些设计问题,您可以使用初始化为默认值的字段,这些字段可以通过(从调用应用程序)向规则引擎传递适当的配置数据而被覆盖。

1.计算或初始化实体字段

在实体上创建计算字段,将表达式值设置为所需的常量。随着附加常量的添加和附加根上下文入口点的实现,这并不能很好地扩展。

为了管理这种复杂性的增长,在这种模式上有许多不同的变化,这些变化几乎都来自于Fowler的重构:

  • 将配置数据提取到(参数)对象中
  • 与其使用计算的字段,不如编写一个初始化规则集。建议使用显式RuleSet来精确控制初始化时间。在控制规则集中,添加调用init规则的执行ruleset操作。编辑:修正指南

2.内联数据表

创建内联表以保存规则使用的这些值和其他常量值。然后,您将查找适当的值(请参阅上文关于不太化规则集的段落,因为这些概念也适用于这里)。

通过适当地构造规则,您可以将问题从“定义常量的最佳方式是什么?”“如何将数据驱动的行为写入规则?”。

讨论并决定配置/const数据类型的位置和所有者是很重要的,它既是业务决策,也是架构决策。

3.定义词汇模板(适用于所有方法)

返回所需常量的表达式模板可以使用户编写如下规则(常量以粗体表示)。

如果申请者低于最低年龄,则将基本分数设置为最低基准分数

无论您决定什么方法,在所有最简单的场景中,您都应该考虑使用词汇表模板,以方便重用和减少规则作者的摩擦。词汇表之所以伟大,是因为它本质上是一个任意定义、可重用、参数化的函数。它的缺点是,规则必须用BL (业务语言)来编写,才能利用词汇表模板。

例如,如果您决定使用查找表来存储常量,则可以创建一个调用GetMemberTableLookup的表达式模板。您没有强迫用户在所有地方都编写相同的表查找语句,而是将查找逻辑合并到一个中心语句中

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41166302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档