(翻译)规则编辑器(Rule Builder)

本文探讨了规则编辑器模式在用户界面设计中的应用,详细解释了如何通过创建动态规则列表来帮助用户基于自定义规则进行高效的数据检索。文章强调了规则编辑器在处理不定类型和数量的检索条件时的优势,并介绍了其核心功能,包括规则的添加、删除、以及设定规则间的逻辑关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题概述

  用户需要经常重复地基于自定义规则进行查询检索。

示例

在这里插入图片描述

用途
  • 用于基于多种条件进行检索查询;
  • 用于保存片段内容(非静态选择内容)[1];
  • 用于帮用户创建动态列表,固化所选规则集合,而不是固化实际检索结果[2];
  • 用于当检索条件的类型不定、数量不定时;
  • 如果用户输入单个文本内容即可找到需要的内容,不要使用本模式;
  • 如果检索查询时每次都采用类型相同的变量,不要使用本模式[3]。
解决方案

  让用户创建动态规则列表,缩小数据集中的匹配结果。每个单独的行或框表示一条规则,所有规则竖直排列。

任一或所有

  用户必须指定规则是必需的(AND,与)还是可选的(OR,或)。本模式的常见简化方法是提供一个选项,指定选择的规则需要全部满足还是满足任一规则即可。
  更精细的做法是对每条规则都设置该规则必须满足还是可选[4]。

区别对待每类规则?

  当用户选择想要的规则时,由这些规则得到的结果取决于在规则中输入的相关且有意义的信息[5]。
  这就是许多规则编辑器提供智能迷你表单的原因,这些表单形式取决于所选的规则类型。如果规则采用文本搜索,则“包含”、“不包含”、“匹配”或“不匹配”这样的选项是有意义的。其他规则可以是从动态列表中选择选项,或者提供数字或范围输入。[6]

添加及删除规则

  规则编辑器中最厉害的功能是动态添加和删除规则。
  添加规则按钮通常位于规则下方,添加和删除规则时其位置保持不变。该按钮也可以放在删除规则按钮旁边,这时添加的规则会插入到指定的规则下面。
  删除规则功能通常放在规则所在行的前头或后面。

说明

  用户使用规则编辑器构建检索条件对一到多个数据集中的内容进行检索查询。
  由于数据集内容因时而变,因此活动规则返回的查询结果是动态的。当满足活动规则的条件、标准和值时,就会执行一组操作。可以将规则集分组为离散单元,配以条件逻辑,以构建复杂的规则条件。[7]

原文地址:http://ui-patterns.com/patterns/rule-builder

[1]原文:Use to save a segment rather than static selection
[2]原文:Use to help users build dynamic lists, making the selected rules static rather than the actual search result
[3]原文:Do not use when the type of search query requires the same types of variables to be chosen every single time.
[4]原文:A more nuanced approach is to allow each rule to be a required match or just an optional match.
[5]原文:As the user choses the kind of rule he or she wants to impose, those rules can have very different impacts on what corresponding data needs to be entered for the rule to give meaning.
[6]原文:This is why many rule builders provide smart mini-forms that vary depending on what kind of rule is selected. One rule might impose a text search, wherein options like “contains”, “does not contain”, “matches”, or “do not match” make sense. Other rules could be to select an option from a dynamic list or to provide numeric- or range inputs.
[7]原文:The results returned by an active rule can be dynamic in nature as its related datasets change over time. An active rule can trigger a set of actions to be performed when the conditions, criteria and values of the rule are met. Rules sets can be grouped into discrete units and linked together with condition logic to create highly complex rule conditions.

### 如何用Java实现动态规则引擎 #### 动态规则引擎的概念及其重要性 在现代软件开发中,业务逻辑往往复杂多变。为了应对这种变化并保持系统的灵活性和可维护性,引入了规则引擎这一工具[^2]。通过将业务逻辑抽象成独立的规则集,可以在不修改核心代码的情况下调整应用行为。 对于Java而言,存在多种方式来构建这样的系统;其中一种流行的选择就是利用开源框架如Easy Rules[^3]。这类库允许开发者定义、管理和执行一系列预设好的条件语句(即“规则”),从而简化了原本繁琐的任务处理流程。 #### 使用Easy Rules创建简单实例 下面展示了一个基本的例子,说明怎样借助于Easy Rules快速搭建起一个简易版的动态规则引擎: ```java import org.jeasy.rules.api.*; import org.jeasy.rules.core.DefaultRulesEngine; import java.util.Arrays; public class SimpleRuleExample { public static void main(String[] args) { // 创建一个新的规则对象 Rule rule = new RuleBuilder() .name("折扣优惠") .description("当购物金额超过100元时给予9折优惠") .when(facts -> (Double) facts.get("amount") > 100d) .then(facts -> System.out.println("享受九折")) .build(); // 初始化事实集合 Facts facts = new Facts(); facts.put("amount", 150d); // 构建规则引擎并将上述规则加入到该引擎内 Rules rules = new Rules(Arrays.asList(rule)); RulesEngine rulesEngine = new DefaultRulesEngine(); // 执行所有已注册过的规则 rulesEngine.fire(rules, facts); } } ``` 此段程序展示了如何定义一条简单的促销活动规则:“如果顾客消费总额大于等于100,则提供额外折扣”。这里的关键在于`RuleBuilder`类提供了非常直观的方法链语法用于描述具体的行为模式,并且能够轻松地与其他组件集成在一起工作。 #### 进一步扩展功能 除了基础的功能之外,还可以考虑以下几个方面来进行增强: - **持久化存储**:支持从数据库或其他外部资源加载/保存规则配置; - **图形界面编辑器**:为用户提供可视化的环境以便更方便地管理复杂的决策树结构; - **版本控制机制**:确保不同时间点上的变更可以被追踪记录下来; - **性能优化措施**:针对大规模并发请求下的高效运行做出相应改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值