Liste over Regelmotorer i Java

1. Oversigt

I denne artikel gennemgår vi nogle af de mest populære regelmotorer til Java.

Inden for missionskritiske applikationer kan processen med at opretholde forretningslogik inden for kildekoden blive for kompliceret. Forretningsregler kan bruges til at lette udviklingen og vedligeholdelsen ved at adskille forretningslogik fra kildekoden.

I Java-verdenen implementerer de fleste af reglerne motorbiblioteker JSR94-standarden kendt som Java Rule API Engine.

2. Kæmper

Drools er en BRMS-løsning (Business Rules Management System). Drools kan integreres med jBPM, et Business Process Management-værktøj til standardisering af proces, begivenhedsaktiviteter, opgaver osv.

Hvis du vil læse mere, er en introduktion til Drools tilgængelig her sammen med en artikel om integration med Spring.

3. OpenL-tabletter

OpenL Tablets er et forretningsreguleringssystem og en forretningsregelmotor baseret på Excel-beslutningstabeller. Da formatet på tabeller, der anvendes af denne ramme, er kendt for forretningsbrugere, bygger det bro mellem forretningsbrugere og udviklere.

Her er et simpelt eksempel på, hvordan rammen fungerer ved hjælp af en Excel-fil, der indeholder beslutningstabeller. Lad os først importere dens afhængigheder, der er afhængige af modulerne org.openl.core og org.openl.rules:

 org.openl org.openl.core 5.19.4 org.openl.rules org.openl.rules 5.19.4 

Nu, en Bruger POJO:

offentlig klasse bruger {privat strengnavn; // getters og setters}

Og en enum, der repræsenterer resultatet af de anvendte regler:

offentlig enum hilsen {// ...}

Det Sag klasse indpakker Bruger objekt med variabler, der fører til resultater:

public class Case {// Variabler for at udlede resultater // getters og setters}

Grænsefladen IRule indeholder reglen indsprøjtet af Excel-filen:

offentlig grænseflade IRule {void helloUser (Case aCase, final Response response); }

Det Respons klasse håndterer returneringen af ​​den anvendte regel:

Offentlig klassesvar {privat strengresultat; privat kortkort = nyt HashMap (); }

Hovedklassen, der udløser regeludførelsen:

offentlig klasse Main {privat IRule-forekomst; public static void main (String [] args) {Main rules = new Main (); // opsæt bruger og sag her regler.proces (aCase); } offentlig ugyldiggørelsesproces (sag aCase) {EngineFactory engineFactory = nye RulesEngineFactory (getClass (). getClassLoader () .getResource ("openltablets / HelloUser.xls"), IRule.class); forekomst = engineFactory.newEngineInstance (); eksempel.helloUser (aCase, nyt svar ()); }}

4. Nemme regler

Easy Rules er en simpel Java-regelsæt, der giver en letvægts- og POJO-baseret ramme til at definere forretning. Det kan skabe komplekse regler fra primitive ved at bruge det sammensatte mønster.

Denne ramme, i modsætning til de mest traditionelle regelmotorer, bruger ikke XML-filer eller nogen domænespecifikke sprogfiler til at adskille regler fra applikationen. Det bruger annoteringsbaserede klasser og metoder til at indsprøjte forretningslogik i applikationen.

Nemme regler kan være praktisk for udviklere at oprette og vedligeholde applikationer med forretningslogik, der er helt adskilt fra selve applikationen. På den anden side, som denne ramme implementerer ikke JSR94-standarden og forretningslogikken skal kodes direkte til Java-kode.

Her giver vi et “Hello, world” -eksempel. Lad os importere de krævede afhængigheder baseret på modulet med nemme regler:

 org.jeasy let-regler-kerne 3.0.0 

Dernæst opretter vi en klasse, der definerer en regel:

@Rule (name = "Hello World rule", description = "Sig altid hej verden") offentlig klasse HelloWorldRule {@Condition offentlig boolsk når () {returner sand; } @Action offentlig ugyldig derefter () kaster Undtagelse {System.out.println ("hej verden"); }}

Endelig opretter vi hovedklassen:

public class Launcher {public static void main (String ... args) {// create facts Fakta fakta = nye fakta (); // opret regler Regler regler = nye regler (); regler.register (nyt HelloWorldRule ()); // Opret en reglermotor og brandregler på kendte fakta RulesEngine rulesEngine = new DefaultRulesEngine (); rulesEngine.fire (regler, fakta); }}

5. Regelbog

RuleBook er en Java-ramme, der udnytter Java 8 lambdas og Chain of Responsibility Pattern til at definere regler ved hjælp af en enkel BDD-tilgang.

Som de fleste reguleringsmotorer bruger RuleBook begrebet “Fakta”, Som er data leveret til regler. RuleBook tillader regler at ændre faktatilstanden, som derefter kan læses og ændres af regler længere nede i kæden. For de regler, der læser i data (Fakta) af en type og output et resultat af en anden type, har RuleBook Beslutninger.

RuleBook kan integreres med Spring ved hjælp af Java DSL.

Her giver vi et simpelt “Hello, world” -eksempel ved hjælp af RuleBook. Lad os tilføje dens afhængighed, der er afhængig af regelbogens kernemodul:

 com.leverer teknologier regelbog-kerne 0.6.2 

Nu opretter vi reglen:

offentlig klasse HelloWorldRule {public RuleBook defineHelloWorldRules () {return RuleBookBuilder .create () .addRule (rule -> rule.withNoSpecifiedFactType () .then (f -> System.out.print ("Hello"))) .addRule (regel - > rule.withNoSpecifiedFactType () .then (f -> System.out.println ("World"))) .build (); }} 

Endelig hovedklassen:

public static void main (String [] args) {HelloWorldRule ruleBook = ny HelloWorldRule (); ruleBook .defineHelloWorldRules () .run (ny FactMap ()); } 

6. Konklusion

I denne hurtige artikel har vi diskuteret nogle kendte biblioteker, der giver motorer til forretningslogisk abstraktion.

Som altid er eksempler fra denne artikel tilgængelige på vores GitHub-arkiv.