easy rules java实例_Easy Rules - 傻瓜式的Java规则引擎

本文介绍了Easy Rules,一个轻量级、易于使用的Java规则引擎,用于避免大量if/else语句。通过注解、Fluent API或表达式语言定义规则,简化业务逻辑。文章提供了使用示例,包括规则定义和执行,展示其在代码维护中的优势。
摘要由CSDN通过智能技术生成

我们在写业务代码时,总会遇到一大堆的 if/else,而大量的分支语句会为代码维护带来不少麻烦,代码的可读性差,将来需要添加或修改逻辑时也十分不便。有没有什么方法可以避免大量判断语句呢?答案是使用规则引擎。Easy Rules,这个轻量级、傻瓜式的规则引擎,十分值得推荐。

a3318c941136e31422f9e0be7c9e8802.gif

Easy Rules - 傻瓜式的Java规则引擎-1.jpg (16.62 KB, 下载次数: 0)

2020-10-20 08:22 上传

条件语句if/else

简介

Easy Rules,是 j-easy 在Github 上开源的 Java 规则引擎,项目仓库在 https://github.com/j-easy/easy-rules,目前版本为 v4.0.0。Easy Rules 作为一个规则引擎库,

十分轻量,API容易上手;基于 POJO 开发,并使用了注解的编程模型;使用了抽象来定义业务规则,并能方便应用;能从基本规则创建组合规则;能使用如 MVEL 和 SpEL 等表达式语言定义规则。

a3318c941136e31422f9e0be7c9e8802.gif

Easy Rules - 傻瓜式的Java规则引擎-2.jpg (28.33 KB, 下载次数: 0)

2020-10-20 08:22 上传

规则引擎

安装

Easy Rules 目前版本为 4.0.0,基于 Java 8,使用 Maven 引入:

    org.jeasy    easy-rules-core    4.0.0示例

使用 Easy Rules,我们首先需要定义规则。Easy Rules 支持不同的规则定义方式,包括

注解@Rule(name = "weather rule", description = "if it rains then take an umbrella")public class WeatherRule {    @Condition    public boolean itRains(@Fact("rain") boolean rain) {        return rain;    }        @Action    public void takeAnUmbrella() {        System.out.println("It rains, take an umbrella!");    }}

使用注解 Rule 定义了规则的名字和描述;使用 Condition 和 Fact 定义了一个条件,在这里是判断是否下雨;使用 Action 定义了规则对应的行动,这里是输出拿雨伞的消息提示。整个 WeatherRule 表达了一条规则:当下雨时提示拿雨伞。

Fluent APIRule weatherRule = new RuleBuilder()        .name("weather rule")        .description("if it rains then take an umbrella")        .when(facts -> facts.get("rain").equals(true))        .then(facts -> System.out.println("It rains, take an umbrella!"))        .build();

使用了 Fluent API 方式定义规则,依次定义了名字、描述、条件和行动,最后进行构建。

表达式语言Rule weatherRule = new MVELRule()        .name("weather rule")        .description("if it rains then take an umbrella")        .when("rain == true")        .then("System.out.println(\"It rains, take an umbrella!\");");

在这里,我们使用了 MVEL 表达式语言,把条件和行动以脚本的形式输入,完成了规则的定义。

YAML的规则描述器name: "weather rule"description: "if it rains then take an umbrella"condition: "rain == true"actions:  - "System.out.println(\"It rains, take an umbrella!\");"

使用了额外的 YAML 配置文件 weather-rule.yml 进行了规则的描述,条件和行动都以表达式语言的脚本给出。然后在 Java 代码中进行规则的构建:

试试MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());Rule weatherRule = ruleFactory.createRule(new FileReader("weather-rule.yml"));

这种方式分离了规则的描述和构建,使得后续的修改更为方便。

在完成了规则的定义后,我们就可以进行使用了。Easy Rules 的使用需要:事实集合(Facts)和规则集合(Rules),然后使用规则引擎,输入事实和规则,进行执行。

public class Test {    public static void main(String[] args) {        // 定义事实        Facts facts = new Facts();        facts.put("rain", true);        // 定义规则        Rule weatherRule = ...        Rules rules = new Rules();        rules.register(weatherRule);        // 使用规则引擎执行        RulesEngine rulesEngine = new DefaultRulesEngine();        rulesEngine.fire(rules, facts);    }}更多

规则的定义包括:名字、描述、优先级、事实集合、条件集合和行动集合,可以进行较为复杂的规则定义;Easy Rules 支持符合规则,模块 easy-rules-support 带有 3 种符合规则的实现,包括:UnitRuleGroup、ActivationRuleGroup 和 ConditionalRuleGroup;规则引擎包括两种实现:DefaultRulesEngine(以规则的自然顺序执行)和 InferenceRulesEngine(一直执行直到没有可用的规则),且接受包括优先级阈值等的参数。

a3318c941136e31422f9e0be7c9e8802.gif

Easy Rules - 傻瓜式的Java规则引擎-3.jpg (69.72 KB, 下载次数: 0)

2020-10-20 08:22 上传

条件语句 if/else

总结

Easy Rules,作为一个规则引擎,优化了代码中大量存在 if/else 的问题,为代码维护带来了许多好处。与其他 Java 的规则引擎相比,Easy Rules 十分轻量,API 设计非常简洁,上手极为简单,在小规模应用的场景中尤为适用。

Easy Rules 项目开发十分活跃,近来发布了新的大版本 4.0.0,提供了许多新的特性和提升。Easy Rules 代码质量高,注释详尽,文档丰富且提供了不少使用例子,是个值得学习和使用的优秀 Java 项目。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值