Popis pokretačkih pravila na Javi

1. Pregled

U ovom ćemo članku proći kroz neke od najpopularnijih mehanizama pravila za Javu.

Unutar kritičnih aplikacija postupak održavanja poslovne logike unutar izvornog koda može postati prekompliciran. Poslovna pravila mogu se koristiti za olakšavanje razvoja i održavanja odvajanjem poslovne logike od izvornog koda.

U svijetu Jave većina biblioteka mehanizama pravila implementira standard JSR94 poznat kao Java Rule API Engine.

2. Drools

Drools je rješenje sustava upravljanja poslovnim pravilima (BRMS). Drools se mogu integrirati s jBPM, alatom za upravljanje poslovnim procesima za standardizaciju procesa, aktivnosti, zadataka itd.

Ako želite pročitati više, ovdje je dostupan uvod u Drools, zajedno sa člankom o integraciji s Springom.

3. OpenL tablete

OpenL Tablets je sustav upravljanja poslovnim pravilima i mehanizam za poslovna pravila zasnovan na Excel tablicama odluka. Budući da je format tablica koji koristi ovaj okvir poznat poslovnim korisnicima, on premošćuje jaz između poslovnih korisnika i programera.

Evo jednostavnog primjera kako okvir funkcionira pomoću Excel datoteke koja sadrži tablice odluka. Prvo uvozimo njegove ovisnosti koje se oslanjaju na org.openl.core i org.openl.rules module:

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

Sada, a Korisnik POJO:

korisnik javne klase {naziv privatnog niza; // geteri i postavljači}

I nabrajanje koje će predstavljati ishod primijenjenih pravila:

Pozdrav za javni popis {// ...}

The Slučaj klasa obavija Korisnik objekt s varijablama koje vode do ishoda:

slučaj javne klase {// Varijable za zaključivanje ishoda // geteri i postavljači}

Sučelje Irila sadrži pravilo koje je ubrizgala Excel datoteka:

javno sučelje IRule {void helloUser (Case aCase, konačni odgovor); }

The Odgovor class obrađuje povratak primijenjenog pravila:

odgovor javne klase {rezultat privatnog niza; karta privatne mape = novi HashMap (); }

Glavna klasa koja pokreće izvršavanje pravila:

javna klasa Main {privatna instanca IRule; javna statička void main (String [] args) {Glavna pravila = novo Main (); // postavljanje korisnika i slučaj ovdje rules.process (aCase); } javni void postupak (Case aCase) {EngineFactory engineFactory = new RulesEngineFactory (getClass (). getClassLoader () .getResource ("openltablets / HelloUser.xls"), IRule.class); instanca = engineFactory.newEngineInstance (); instance.helloUser (aCase, novi odgovor ()); }}

4. Jednostavna pravila

Jednostavna pravila je jednostavan mehanizam Java pravila koji pruža lagan i POJO zasnovan okvir za definiranje poslovanja. Složenim uzorkom može stvoriti složena pravila od primitivnih.

Ovaj okvir, za razliku od većine tradicionalnih mehanizama pravila, ne koristi XML datoteke niti bilo koju datoteku određenog domene za odvajanje pravila od aplikacije. Koristi klase i metode temeljene na bilješkama za ubrizgavanje poslovne logike u aplikaciju.

Jednostavna pravila mogu biti korisna programerima za stvaranje i održavanje aplikacija s poslovnom logikom koja je u potpunosti odvojena od same aplikacije. S druge strane, kao ovaj okvir ne provodi standard JSR94 a poslovna logika mora biti kodirana ravno u Java kôd.

Ovdje pružamo primjer „Zdravo, svijete“. Uvezimo potrebne ovisnosti na temelju modula core-easy-rules:

 org.jeasy easy-rules-core 3.0.0 

Dalje, kreiramo klasu koja definira pravilo:

@Rule (name = "Hello World rule", description = "Uvijek reci hello world") javna klasa HelloWorldRule {@Condition public boolean when () {return true; } @Action public void then () baca iznimku {System.out.println ("hello world"); }}

Na kraju kreiramo glavnu klasu:

pokretač javne klase {public static void main (String ... args) {// stvaranje činjenica Činjenice činjenice = nove činjenice (); // kreiramo pravila Rules rules = nova pravila (); rules.register (novo HelloWorldRule ()); // kreiramo mehanizam pravila i pokrećemo pravila o poznatim činjenicama RulesEngine rulesEngine = new DefaultRulesEngine (); rulesEngine.fire (pravila, činjenice); }}

5. Pravilnik

RuleBook je Java okvir koji koristi Java 8 lambde i obrazac lanca odgovornosti za definiranje pravila pomoću jednostavnog BDD pristupa.

Kao i većina motora s pravilima, i RuleBook koristi koncept „Činjenice”, Što su podaci dostavljeni pravilima. RuleBook dopušta pravilima da modificiraju činjenično stanje, koje se zatim mogu čitati i mijenjati pravilima dalje u lancu. Za ona pravila koja čitaju podatke (Činjenice) jednog tipa i rezultat drugog tipa, RuleBook ima Odluke.

RuleBook se može integrirati s Springom koristeći Java DSL.

Ovdje pružamo jednostavan primjer "Zdravo, svijete" pomoću RuleBook-a. Dodajmo njegovu ovisnost koja se oslanja na temeljni modul pravilnika:

 com.deliveredtechnologies pravilnik-jezgra 0.6.2 

Sada kreiramo pravilo:

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

Napokon, glavna klasa:

javna statička void glavna (String [] args) {HelloWorldRule ruleBook = novo HelloWorldRule (); ruleBook .defineHelloWorldRules () .run (nova FactMap ()); } 

6. Zaključak

U ovom kratkom članku razgovarali smo o nekim poznatim knjižnicama koje nude motore za apstrakciju poslovne logike.

Kao i uvijek, primjeri iz ovog članka dostupni su na našem GitHub spremištu.