HOWTO · Java

Java 中的規則引擎列表

本教程演示了 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 平板電腦