Liste over Regelmotorer i Java

1. Oversikt

I denne artikkelen vil vi gå gjennom noen av de mest populære regelmotorene for Java.

Innen oppdragskritiske applikasjoner kan prosessen med å opprettholde forretningslogikk i kildekoden bli for komplisert. Forretningsregler kan brukes til å lette utviklingen og vedlikeholdet ved å skille forretningslogikk fra kildekoden.

I Java-verdenen implementerer de fleste regelbiblioteker JSR94-standarden kjent som Java Rule API Engine.

2. Sikrer

Drools er en BRMS-løsning (Business Rules Management System). Drools kan integreres med jBPM, et forretningsprosessstyringsverktøy for standardisering av prosess, hendelsesaktiviteter, oppgaver osv.

Hvis du vil lese mer, er en introduksjon til Drools tilgjengelig her, sammen med en artikkel om integrering med Spring.

3. OpenL-nettbrett

OpenL Tablets er et styringssystem for forretningsregler og en motor for forretningsregler basert på Excel-beslutningstabeller. Siden formatet på tabeller som brukes av dette rammeverket er kjent for forretningsbrukere, bygger det bro mellom forretningsbrukere og utviklere.

Her er et enkelt eksempel på hvordan rammeverket fungerer ved å bruke en Excel-fil som inneholder beslutningstabeller. La oss først importere avhengighetene som er avhengige av modulene org.openl.core og org.openl.rules:

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

Nå, a Bruker POJO:

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

Og en enum som vil representere utfallet av de anvendte reglene:

offentlig enum hilsen {// ...}

De Sak klasse pakker inn Bruker objekt med variabler som fører til utfall:

public class Case {// Variabler for å utlede resultater // getters og setters}

Grensesnittet Jeg hersker inneholder regelen injisert av Excel-filen:

offentlig grensesnitt IRule {void helloUser (Case aCase, final Response response); }

De Respons klasse håndterer retur av den anvendte regelen:

Offentlig klassesvar {privat strengresultat; privat kartkart = nytt HashMap (); }

Hovedklassen som utløser regelutførelsen:

offentlig klasse Hoved {privat IRule-forekomst; public static void main (String [] args) {Hovedregler = ny Main (); // sette opp bruker og tilfelle her rules.process (aCase); } offentlig ugyldig prosess (Case aCase) {EngineFactory engineFactory = nye RulesEngineFactory (getClass (). getClassLoader () .getResource ("openltablets / HelloUser.xls"), IRule.class); forekomst = engineFactory.newEngineInstance (); instance.helloUser (aCase, new Response ()); }}

4. Enkle regler

Easy Rules er en enkel Java-reglermotor som gir et lett og POJO-basert rammeverk for å definere virksomhet. Det kan skape komplekse regler fra primitive ved å bruke det sammensatte mønsteret.

Dette rammeverket, i motsetning til de mest tradisjonelle regelmotorene, bruker ikke XML-filer eller noen domenespesifikke språkfiler for å adskille regler fra applikasjonen. Den bruker merknadsbaserte klasser og metoder for å injisere forretningslogikk i applikasjonen.

Enkle regler kan være nyttige for utviklere å lage og vedlikeholde applikasjoner med forretningslogikk som er helt atskilt fra selve applikasjonen. På den annen side, som dette rammeverket implementerer ikke JSR94-standarden og forretningslogikken må kodes rett til Java-kode.

Her gir vi et "Hello, world" -eksempel. La oss importere de nødvendige avhengighetene basert på modulen med enkle regler:

 org.jeasy easy-rules-core 3.0.0 

Deretter lager vi en klasse som definerer en regel:

@Rule (name = "Hello World rule", description = "Alltid si hei verden") offentlig klasse HelloWorldRule {@Condition offentlig boolsk når () {return true; } @Action public void then () kaster Unntak {System.out.println ("hei verden"); }}

Til slutt lager vi hovedklassen:

public class Launcher {public static void main (String ... args) {// create facts Fakta fakta = nye fakta (); // lage regler Regler regler = nye regler (); regler.register (ny HelloWorldRule ()); // lage en reglermotor og brannregler på kjente fakta RulesEngine rulesEngine = new DefaultRulesEngine (); reglerEngine.fire (regler, fakta); }}

5. Regelbok

RuleBook er et Java-rammeverk som utnytter Java 8 lambdas og Chain of Responsibility Pattern for å definere regler ved hjelp av enkel BDD-tilnærming.

Som de fleste reguleringsmotorer bruker RuleBook begrepet “Fakta”, Som er data levert til regler. RuleBook tillater regler for å endre faktatilstanden, som deretter kan leses og modifiseres av regler lenger nede i kjeden. For de reglene som leses i data (Fakta) av en type og sender ut et resultat av en annen type, har RuleBook Avgjørelser.

RuleBook kan integreres med Spring ved hjelp av Java DSL.

Her gir vi et enkelt “Hello, world” -eksempel ved bruk av RuleBook. La oss legge til sin avhengighet som er avhengig av regelbok-kjernemodulen:

 com.leverer teknologier regelbok-kjerne 0.6.2 

Nå oppretter vi regelen:

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 (); }} 

Til slutt, hovedklassen:

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

6. Konklusjon

I denne raske artikkelen har vi diskutert noen kjente biblioteker som gir motorer for forretningslogisk abstraksjon.

Som alltid er eksempler fra denne artikkelen tilgjengelig på GitHub-depotet vårt.


$config[zx-auto] not found$config[zx-overlay] not found