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.