Java 中的規則引擎列表

Sheeraz Gul 2023年10月12日
Java 中的規則引擎列表

規則引擎將業務邏輯與原始碼分開。本教程描述了一些最流行的 Java 規則引擎。

Java 中的規則引擎列表

規則引擎可以輕鬆地將業務邏輯與程式碼分離。Java 中大多數流行的規則引擎都實現了 JSR94。

我們可以將規則引擎視為複雜的 if/then 語句。以下是 Java 中規則引擎的一些優點:

  1. 當我們將它們分開時,規則引擎提供了很好的可重用性。
  2. 規則引擎降低了複雜性,因為我們不需要開發原始碼。
  3. 規則引擎提供了靈活性,我們可以在不更改原始碼中的任何內容的情況下更改規則。

以下是 Java 中一些著名的規則引擎:

流口水

Drools,也被稱為業務規則管理系統 BRMS,提供了一個核心業務規則引擎和一個 Web 創作和規則管理應用程式。它還為帶有符號 (DMN) 的決策模型和 Eclipse IDE 外掛提供完整的執行時支援。

規則書

RuleBook 提供了一個靈活的簡單 DSL;如果我們有更大的規則集合,我們可以將它們構建成帶註釋的 POJO,RuleBook 會將包轉換為規則手冊。使用啟用 lambda 的特定語言很容易。

讓我們使用 RuleBook 嘗試一個簡單的規則定義:

規則書的 Maven 依賴項是:

<dependency>
    <groupId>com.deliveredtechnologies</groupId>
    <artifactId>rulebook-core</artifactId>
    <version>${version}</version>
</dependency>

現在讓我們看一下規則手冊示例。讓我們首先建立一個規則:

public class DelftstackRule {
  public RuleBook<Object> defineDelftstackRules() {
    return RuleBookBuilder.create()
        .addRule(rule -> rule.withNoSpecifiedFactType().then(f -> System.out.print("Delftstack")))
        .addRule(rule
            -> rule.withNoSpecifiedFactType().then(
                f -> System.out.println("The Best Tutorial Site")))
        .build();
  }
}

上述規則的主要方法是:

public static void main(String[] args) {
  DelftstackRule ruleBook = new DelftstackRule();
  ruleBook.defineDelftstackRules().run(new FactMap<>());
}

簡單的規則

Easy Rules 是一個輕量級的規則引擎 API,提供了規則抽象來根據動作和條件建立規則。EasyRule RulesEngine API 通過一組規則來執行操作和測試條件。

它也是註解和基於 POJO 的,還支援複合規則構造;它支援 SpEL 和 MVEL 等表達語言。這是 EasyRule 的示例:

Maven 依賴;

<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-core</artifactId>
    <version>3.3.0</version>
</dependency>

該示例可以是:

@Rule(name = "Delftstack rule", description = "Always say Delftstack The Best Tutorial Site")
public class DelftstackRule {
  @Condition
  public boolean when() {
    return true;
  }

  @Action
  public void then() throws Exception {
    System.out.println("Delftstack The Best Tutorial Site");
  }
}

上面的程式碼建立了一個規則,每次列印 Delftstack The Best Tutorial Site。要啟動此程式碼,請使用以下程式碼和 main 函式:

public class Launch {
  public static void main(String... args) {
    Facts facts = new Facts();

    // create rules
    Rules rules = new Rules();
    rules.register(new DelftstackRule());

    // create a rules engine and fire rules on known facts
    RulesEngine Rules_Engine = new DefaultRulesEngine();
    Rules_Engine.fire(rules, facts);
  }
}

OpenL Tablets

OpenL Tablets 是一個業務規則引擎和一個業務規則管理系統。它包含 Webstudio、Web 服務、規則儲存庫和業務規則引擎。

讓我們看一個例子:

OpenL Tablets 的 Maven 依賴項:

<dependency>
    <groupId>org.openl</groupId>
    <artifactId>org.openl.core</artifactId>
    <version>${version}</version>
</dependency>
<dependency>
    <groupId>org.openl.rules</groupId>
    <artifactId>org.openl.rules</artifactId>
    <version>${version}</version>
</dependency>

該示例可以是:

public class Main {
  private DelftstackRules instance;

  public static void main(String[] args) {
    Main rules = new Main();

    rules.process(aCase);
  }

  public void process(Case aCase) {
    EngineFactory Engine_Factory = new RulesEngineFactory(
        getClass().getClassLoader().getResource("rules.xls"), DelftstackRules.class);
    instance = Engine_Factory.newEngineInstance();
    instance.executePromotion(aCase, new Response());
  }
}

上面的程式碼從 Xls 檔案建立了 delftstack 規則。

這些是一些流行的規則引擎。要下載或瞭解更多資訊,請訪問以下連結:

  1. Drools
  2. 規則書
  3. 簡易規則
  4. OpenL 平板電腦
作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook