HOWTO · Java
Java 中的規則引擎列表
本教程演示了 Java 中的規則引擎列表。
本頁內容
規則引擎將業務邏輯與原始碼分開。本教程描述了一些最流行的 Java 規則引擎。
Java 中的規則引擎列表
規則引擎可以輕鬆地將業務邏輯與程式碼分離。Java 中大多數流行的規則引擎都實現了 JSR94。
我們可以將規則引擎視為複雜的 if/then 語句。以下是 Java 中規則引擎的一些優點:
- 當我們將它們分開時,規則引擎提供了很好的可重用性。
- 規則引擎降低了複雜性,因為我們不需要開發原始碼。
- 規則引擎提供了靈活性,我們可以在不更改原始碼中的任何內容的情況下更改規則。
以下是 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 規則。
這些是一些流行的規則引擎。要下載或瞭解更多資訊,請訪問以下連結: