Списък с правила за двигатели в Java

1. Общ преглед

В тази статия ще разгледаме някои от най-популярните механизми за правила за Java.

В критично важните приложения процесът на поддържане на бизнес логика в изходния код може да стане твърде сложен. Бизнес правилата могат да се използват за улесняване на разработването и поддръжката чрез отделяне на бизнес логиката от изходния код.

В света на Java повечето библиотеки на механизмите за правила изпълняват стандарта JSR94, известен като Java Rule API Engine.

2. Drools

Drools е решение за система за управление на бизнес правила (BRMS). Drools могат да се интегрират с jBPM, инструмент за управление на бизнес процеси за стандартизация на процес, дейности, задачи и др.

Ако искате да прочетете повече, тук е достъпно въведение в Drools, заедно със статия за интеграция с Spring.

3. OpenL таблети

OpenL Tablets е система за управление на бизнес правила и механизъм за бизнес правила, базиран на таблици за решения на Excel. Тъй като форматът на таблиците, използван от тази рамка, е познат на бизнес потребителите, той преодолява пропастта между бизнес потребители и разработчици.

Ето един прост пример за това как работи рамката с помощта на файл на Excel, съдържащ таблици за решения. Първо, нека импортираме зависимостите му, които разчитат на модулите org.openl.core и org.openl.rules:

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

Сега потребител POJO:

public class User { private String name; // getters and setters }

И изброяване, което ще представлява резултата от приложените правила:

public enum Greeting { // ... }

Класът Case обгръща обекта User с променливи, които водят до резултати:

public class Case { // Variables to infer outcomes // getters and setters }

Интерфейсът IRule съдържа правилото, инжектирано от файла на Excel:

public interface IRule { void helloUser(Case aCase, final Response response); }

Класът Response обработва връщането на приложеното правило:

public class Response { private String result; private Map map = new HashMap(); }

Основният клас, който задейства изпълнението на правилото:

public class Main { private IRule instance; public static void main(String[] args) { Main rules = new Main(); // setup user and case here rules.process(aCase); } public void process(Case aCase) { EngineFactory engineFactory = new RulesEngineFactory( getClass().getClassLoader() .getResource("openltablets/HelloUser.xls"), IRule.class); instance = engineFactory.newEngineInstance(); instance.helloUser(aCase, new Response()); } }

4. Лесни правила

Easy Rules е прост механизъм за правила на Java, който осигурява лека и базирана на POJO рамка за определяне на бизнеса. Той може да създава сложни правила от примитивни с помощта на съставния модел.

Тази рамка, за разлика от най-традиционните механизми за правила, не използва XML файлове или файлове с конкретен домейн, за да отдели правилата от приложението. Той използва класове и методи, базирани на анотации, за инжектиране на бизнес логика в приложението.

Лесните правила могат да бъдат полезни за разработчиците да създават и поддържат приложения с бизнес логика, която е напълно отделена от самото приложение. От друга страна, тъй като тази рамка не прилага стандарта JSR94 и бизнес логиката трябва да бъде кодирана направо в Java код.

Тук предоставяме пример „Здравей, свят“. Нека импортираме необходимите зависимости, базирани на модула с основни лесни правила:

 org.jeasy easy-rules-core 3.0.0 

След това създаваме клас, който дефинира правило:

@Rule(name = "Hello World rule", description = "Always say hello world") public class HelloWorldRule { @Condition public boolean when() { return true; } @Action public void then() throws Exception { System.out.println("hello world"); } }

И накрая, ние създаваме основния клас:

public class Launcher { public static void main(String... args) { // create facts Facts facts = new Facts(); // create rules Rules rules = new Rules(); rules.register(new HelloWorldRule()); // create a rules engine and fire rules on known facts RulesEngine rulesEngine = new DefaultRulesEngine(); rulesEngine.fire(rules, facts); } }

5. RuleBook

RuleBook е Java рамка, която използва ламбда Java 8 и модела Chain of Responsibility, за да дефинира правила, използвайки прост BDD подход.

Подобно на повечето механизми за правила, RuleBook използва концепцията за „ факти “, която представлява данни, предоставени на правилата. RuleBook позволява на правилата да променят състоянието на фактите, които след това могат да бъдат прочетени и модифицирани от правила по-надолу по веригата. За тези правила, които четат в данни ( факти ) от един тип и извеждат резултат от различен тип, RuleBook има решения .

RuleBook може да се интегрира с Spring чрез Java DSL.

Тук предлагаме прост пример „Здравей, свят“, използвайки RuleBook. Нека добавим неговата зависимост, която разчита на основния модул на правилата:

 com.deliveredtechnologies rulebook-core 0.6.2 

Сега създаваме правилото:

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

И накрая, основният клас:

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

6. Заключение

В тази кратка статия обсъдихме някои добре познати библиотеки, които предоставят двигатели за абстракция на бизнес логика.

Както винаги, примери от тази статия са налични в нашето хранилище на GitHub.