Java中最流行的幾種業務規則引擎簡介
在本文中,我們將檢查Java中一些最受歡迎的規則引擎。規則引擎使將業務邏輯與原始碼分離變得容易。我們可能會將規則引擎視為複雜的if/then語句,在Java中,大多數流行的規則引擎都實現JSR94。
介紹
想象一下規則引擎是一個將資料和規則作為輸入的系統。它將這些規則應用於資料,並根據規則定義為我們提供輸出。讓我們以一個線上購物為例,我們希望為客戶提供某些促銷或折扣。
- 如果購物車總額超過$ 400,可為客戶提供20%的折扣。
- 第一次下單給10%。
上面將購物車和客戶定義為滿足規則集中定義的條件的規則將在其中執行的資料。
使用規則引擎有幾個優點:
- 它提供了極大的靈活性,我們可以在不對原始碼進行重大更改的情況下更改規則。
- 由於我們不再需要在原始碼中構建規則引擎邏輯,因此降低了複雜性。
- 通過將規則引擎分開,它提供了更大的可重用性。
讓我們看一下Java中一些流行的規則引擎。
1.Drools
Drools是業務規則管理系統(BRMS)解決方案。它提供了核心業務規則引擎(BRE),Web創作和規則管理應用程式(Drools Workbench),對符合性級別3的決策模型和註釋(DMN)模型的完整執行時支援,以及用於核心開發的Eclipse IDE外掛。
2.EasyRule
EasyRule是輕量級的規則引擎API。它提供Rule抽象來建立帶有條件和動作的規則,以及RulesEngine通過一組規則執行以測試條件和執行動作的API。以下是EasyRule的一些核心功能:
- 輕量級規則引擎API。
- 基於註釋和POJO。
- 支援複合規則構造。
- 支援表達語言(如MVEL和SpEL)來定義規則。
讓我們概述一下Easy Rules API。加入依賴:
<dependency> <groupId>org.jeasy</groupId> <artifactId>easy-rules-core</artifactId> <version>3.3.0</version> </dependency> |
Easy Rules 提供以下建立規則的選項
- 宣告式地使用註釋。
- 務實地使用流利的API。
- 使用表達語言
- 使用規則描述符。
讓我們看幾個例子:
@Rule(name = "cart total rule", description = "Give 10% off when shopping cart is greater than $200" ) public class CartTotalRule { @Condition public boolean cartTotal(@Fact("cart") Cart cart) { return cart.isGreaterThanTwoHundered; } @Action public void giveDiscount(@Fact("cart") Cart cart) { cart.setTotalDiscount(200); } } |
規則引擎的最後一部分是基於事實和規則資料執行規則。
public class CartTotalRuleTest { public static void main(String args) { // define facts Facts facts = new Facts(); facts.put("cart", get_customer_cart); // define rules Rule cartTotalRUle = CartTotalRule Rules rules = new Rules(); rules.register(cartTotalRUle); // fire rules on known facts RulesEngine rulesEngine = new DefaultRulesEngine(); rulesEngine.fire(rules, facts); } } |
3. RuleBook
RuleBook提供了靈活的簡單直觀的DSL。如果您有更多規則集,我們可以將其構建為帶註釋的POJO,並且RuleBook可以將整個包立即轉換為RuleBook。它提供了一個易於使用的啟用Lambda的領域特定語言或使用POJO,讓我們使用RuleBook來檢視一個簡單的規則定義:
要在您的專案中新增RuleBook,請在pom.xml檔案中新增以下依賴項:
<dependency> <groupId>com.deliveredtechnologies</groupId> <artifactId>rulebook-core</artifactId> <version>${version}</version> </dependency> |
讓我們看一個例子:
public class Cart{ private double cartTotal; private String cartId; private Customer user; private List cartEntries; //getter and setter } public class ShoppingCartRule extends CoRRuleBook { @Override public void defineRules() { //give 10% off when cart total is greater than $200 addRule(RuleBuilder.create().withFactType(Cart.class).withResultType(Double.class) .when(facts -> facts.getOne().getCartTotal() > 200) .then((facts, result) -> result.setValue(20)) .stop() .build()); } |
讓我們執行規則:
public class CartPromotionRule { public static void main(String args) { RuleBook cartPromotion = RuleBookBuilder.create(ShoppingCartRule.class).withResultType(Double.class) .withDefaultResult(0.0) .build(); NameValueReferableMap facts = new FactMap(); facts.setValue("cart", new Cart(450.0, 123456, customer, entries)); cartPromotion.run(facts); } } |
4. OpenL平板電腦
OpenL Tablets業務規則引擎(BRE)和業務規則管理系統(BRMS)。它包含以下主要元件:
- 業務規則引擎
- 網路工作室
- 網頁服務
- 規則儲存庫(基於JCR的實現)
要新增依賴項,請將以下內容新增到pom.xml中:
<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 CartPromotionRules instance; public static void main(String args) { Main rules = new Main(); // setup user and case here rules.process(aCase); } public void process(Case aCase) { EngineFactory engineFactory = new RulesEngineFactory( getClass().getClassLoader() .getResource("rules.xls"), CartPromotionRules.class); instance = engineFactory.newEngineInstance(); instance.executePromotion(aCase, new Response()); } } |
注意
- Jess –一種類似於Clips的Rule引擎,可通過Java使用Common Lisp的全部功能進行訪問
- JLisa –小型,輕便,快速的規則引擎和完全用Java編寫的指令碼環境;允許訪問所有Java API。
概括
在本文中,我們討論了Java中流行的規則引擎。這些規則引擎為業務邏輯抽象提供了靈活性。在所有這些規則引擎中,Drools是最先進,最活躍的規則引擎。
相關文章
- Drools規則引擎簡介
- Java各種規則引擎Java
- Evrete 規則引擎簡介 | baeldungVR
- uwegeercken/jare:Java業務規則引擎(Jare)JARJava
- 用 Java 構建簡單的規則引擎Java
- Drools 業務規則引擎的完整教程
- 什麼是業務規則引擎?
- 決策表模式: 一種業務規則引擎實現方式模式
- j-easy/easy-rules: Java簡單的規則引擎Java
- Java規則引擎 Easy RulesJava
- Devs--開源規則引擎介紹dev
- 用規則引擎開發靈活配置的業務系統
- 快速實現業務規則的開源API邏輯伺服器簡介API伺服器
- 如何學習Java的規則引擎模式? - plagovJava模式Go
- RAP簡介教程&常用規則
- cerner/clara-rules: Clojure的業務規則引擎與專家系統
- 第2-4-4章 規則引擎Drools規則屬性-業務規則管理系統-元件化-中臺元件化
- URule規則引擎
- 在Java中用規則引擎模式替代ifelse - VitaliJava模式
- .NET RulesEngine(規則引擎)
- 規則引擎模式 - upperdine模式
- Java中幾種常用的RPC框架介紹JavaRPC框架
- 風控規則引擎(一):Java 動態指令碼Java指令碼
- JavaScript中的幾種資料結構簡介JavaScript資料結構
- 第2-4-6章 springboot整合規則引擎Drools-業務規則管理系統-元件化-中臺Spring Boot元件化
- 第2-4-2章 規則引擎Drools入門案例-業務規則管理系統-元件化-中臺元件化
- TDengine3.0 流式計算引擎語法規則介紹
- Drools 規則引擎應用
- 架構 規則引擎 quartz架構quartz
- 第2-4-5章 規則引擎Drools高階語法-業務規則管理系統-元件化-中臺元件化
- 業務規則引擎平臺如何降低程式設計師工作量? - brcommunity程式設計師Unity
- 單一職責原則:軟體世界中最重要的規則 - DZone
- 如何編寫一個簡單但強大的規則引擎? – maxant
- 簡單介紹MySQL索引失效的幾種情況MySql索引
- 業務規則的常見問題解答
- 基於自然語言業務規則引擎的客戶資料平臺:Oracle Intelligent AdvisorOracleIntel
- 規則引擎在IoT的重要性?
- 規則引擎Golang指南 – Mohit KhareGolang