j-easy/easy-rules: Java簡單的規則引擎

banq發表於2022-02-11

Easy Rules 是一個簡單而強大的 Java 規則引擎,提供以下功能:
  • 輕量級框架和易於學習的 API
  • 基於 POJO 的開發
  • 有用的抽象來定義業務規則並輕鬆應用它們
  • 從原始規則建立複合規則的能力
  • 使用表示式語言(如 MVEL、SpEL 和 JEXL)定義規則的能力

您可以自己構建一個簡單的規則引擎。您只需要建立一堆具有條件和操作的物件,將它們儲存在一個集合中,然後執行它們以評估條件並執行操作。
這正是 Easy Rules 所做的,它提供了Rule建立具有條件和操作的規則的抽象,以及RulesEngine貫穿一組規則以評估條件和執行操作的 API。
核心功能
  • 輕量級庫和易於學習的 API
  • 基於 POJO 的開發,帶有註釋程式設計模型
  • 用於定義業務規則並使用 Java 輕鬆應用它們的有用抽象
  • 從原始規則建立複合規則的能力
  • 使用表示式語言(如 MVEL、SpEL 和 JEXL)定義規則的能力

定義程式碼:

@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 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();


測試:

public class Test {
    public static void main(String[] args) {
        // define facts
        Facts facts = new Facts();
        facts.put("rain", true);

        // define rules
        Rule weatherRule = ...
        Rules rules = new Rules();
        rules.register(weatherRule);

        // fire rules on known facts
        RulesEngine rulesEngine = new DefaultRulesEngine();
        rulesEngine.fire(rules, facts);
    }
}




 

相關文章