Szabálymotorok listája a Java-ban

1. Áttekintés

Ebben a cikkben áttekintjük a Java legnépszerűbb szabálymotorjait.

A misszió szempontjából kritikus alkalmazásokon belül az üzleti logika fenntartása a forráskódban túl bonyolulttá válhat. Az üzleti szabályokat fel lehet használni a fejlesztés és a karbantartás megkönnyítésére az üzleti logika és a forráskód elválasztásával.

A Java-világban a legtöbb szabálymotor-könyvtár a Java Rule API Engine néven ismert JSR94 szabványt valósítja meg.

2. Drools

A Drools egy üzleti szabálykezelő rendszer (BRMS) megoldás. A Drools integrálható a jBPM-hez, amely egy üzleti folyamatkezelő eszköz a folyamatok, események, feladatok stb.

Ha többet szeretne olvasni, itt elérhető a Drools bemutatkozása, valamint egy cikk a Spring-szel való integrációról.

3. OpenL Tablets

Az OpenL Tablets egy üzleti szabálykezelő rendszer és egy üzleti szabály motor, amely az Excel döntési táblázatokon alapul. Mivel a keretrendszer által használt táblázatok formátuma ismerős az üzleti felhasználók számára, áthidalja az üzleti felhasználók és a fejlesztők közötti szakadékot.

Íme egy egyszerű példa a keretrendszer működésére a döntési táblázatokat tartalmazó Excel fájl használatával. Először importáljuk függőségeit, amelyek az org.openl.core és az org.openl.rules modulokra támaszkodnak:

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

Most, a Felhasználó POJO:

public class Felhasználó {private String name; // szerelők és beállítók}

És egy összegzés, amely az alkalmazott szabályok eredményét fogja képviselni:

public enum Üdvözlet {// ...}

A Ügy osztály tekeri a Felhasználó objektum változókkal, amelyek kimenetelhez vezetnek:

public class Case {// Változók az eredmények következtetésére // getters and setters}

Az interfész IRule tartalmazza az Excel fájl által injektált szabályt:

nyilvános felület IRule {void helloUser (Case aCase, végleges válasz válasz); }

A Válasz osztály kezeli az alkalmazott szabály visszatérését:

public class Válasz {private String eredmény; privát térkép térkép = new HashMap (); }

A fő osztály, amely beindítja a szabály végrehajtását:

public class Main {privát IRule példány; public static void main (String [] args) {Fő szabályok = új Main (); // a felhasználó és az eset beállítása itt szabályok.process (aCase); } public void process (Case aCase) {EngineFactory engineFactory = new RulesEngineFactory (getClass (). getClassLoader () .getResource ("openltablets / HelloUser.xls"), IRule.class); példány = engineFactory.newEngineInstance (); instance.helloUser (aCase, új válasz ()); }}

4. Könnyű szabályok

Az Easy Rules egy egyszerű Java szabály motor, amely könnyű és POJO alapú keretet biztosít az üzlet meghatározásához. Kompozit szabályokat hozhat létre primitívekből az összetett minta használatával.

Ez a keretrendszer, a legtöbb hagyományos szabálymotorral ellentétben, nem használ XML fájlokat vagy bármely Tartományspecifikus nyelv fájlokat a szabályok szétválasztására az alkalmazásból. Az annotáció-alapú osztályokat és módszereket alkalmazza az üzleti logika beillesztésére az alkalmazásba.

Az Easy Rules hasznos lehet a fejlesztők számára, hogy üzleti logikával olyan alkalmazásokat hozzanak létre és tartsanak fenn, amelyek teljesen el vannak különítve magától az alkalmazástól. Másrészt as ez a keret nem valósítja meg a JSR94 szabványt és az üzleti logikát egyenesen Java kódra kell kódolni.

Itt bemutatunk egy „Hello, világ” példát. Importáljuk a szükséges függőségeket az easy-rules-core modul alapján:

 org.jeasy easy-rules-core 3.0.0 

Ezután létrehozunk egy osztályt, amely meghatároz egy szabályt:

@Rule (name = "Hello World rule", description = "Mindig köszönj világot") public class HelloWorldRule {@Condition public boolean when () {return true; } @Action public void then () dobja a {System.out.println ("hello world") kivételt; }}

Végül létrehozzuk a fő osztályt:

public class Launcher {public static void main (String ... args) {// tények létrehozása Tények tények = új Tények (); // szabályok létrehozása Szabályok szabályok = új Szabályok (); rules.register (új HelloWorldRule ()); // szabálymotor létrehozása és tűzvédelmi szabályok ismert tényekről RulesEngine rulesEngine = new DefaultRulesEngine (); rulesEngine.fire (szabályok, tények); }}

5. Szabálykönyv

A RuleBook egy Java keretrendszer, amely a Java 8 lambdas és a Chain of Responsibility Pattern segítségével kiaknázza a szabályokat egyszerű BDD megközelítéssel.

A legtöbb szabálymotorhoz hasonlóan a RuleBook is a „Tények”, Amely a szabályoknak szolgáltatott adatok. A RuleBook lehetővé teszi, hogy a szabályok módosítsák a tényállapotot, amelyet aztán a láncban lejjebb lévő szabályok olvashatnak és módosíthatnak. Azokra a szabályokra, amelyek beolvassák az adatokat (Tények) és egy másik típusú eredményt ad ki, a RuleBook rendelkezik Döntések.

A RuleBook a Java DSL segítségével integrálható a Spring-be.

Itt egy egyszerű „Hello, world” példát mutatunk be a RuleBook használatával. Adjuk hozzá annak függőségét, amely a szabálykönyv-mag modulra támaszkodik:

 com.deliveredtechnologies szabálykönyv-mag 0.6.2 

Most létrehozzuk a szabályt:

public class HelloWorldRule {public RuleBook defineHelloWorldRules () {return RuleBookBuilder .create () .addRule (rule -> rule.withNoSpecifiedFactType () .then (f -> System.out.print ("Hello"))) .addRule (szabály - > rule.withNoSpecifiedFactType () .then (f -> System.out.println ("Világ"))) .build (); }} 

Végül a fő osztály:

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

6. Következtetés

Ebben a gyors cikkben néhány ismert könyvtárról beszélgettünk, amelyek motorokat biztosítanak az üzleti logika absztrakciójához.

Mint mindig, a cikk példái is elérhetők a GitHub-adattárunkban.