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.