Список правил движков в Java
1. обзор
В этой статье мы рассмотрим некоторые из самых популярных механизмов правил для Java.
В критически важных приложениях процесс поддержки бизнес-логики в исходном коде может стать слишком сложным. Бизнес-правила могут быть использованы для облегчения разработки и сопровождения путем отделения бизнес-логики от исходного кода.
В мире Java большинство библиотек механизмов правил реализуют стандарт JSR94, известный какJava Rule API Engine.
2. Drools
Drools - это система управления бизнес-правилами (BRMS). Drools может интегрироваться с jBPM, инструментом управления бизнес-процессами, для стандартизации процессов, событий, задач и т. Д.
Если вы хотите узнать больше, доступно введение в Droolshere, а также статья оintegration with 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
Теперь POJOUser:
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 или файлы, относящиеся к конкретному домену, для отделения правил от приложения. Он использует основанные на аннотации классы и методы для внедрения бизнес-логики в приложение.
Простые правила могут быть удобны разработчикам для создания и поддержки приложений с бизнес-логикой, полностью отделенной от самого приложения. С другой стороны, какthis framework doesn’t implement the JSR94 standard, так и бизнес-логика должна быть написана прямо в коде Java.
Здесь мы приводим пример «Привет, мир». Давайте импортируем необходимые зависимости на основе модуляeasy-rules-core:
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 и шаблон цепочки ответственности для определения правил с использованием простого подхода BDD.
Как и большинство механизмов правил, RuleBook использует концепцию «Facts», которая представляет собой данные, передаваемые в правила. RuleBook позволяет правилам изменять состояние фактов, которое затем может быть прочитано и изменено правилами далее по цепочке. Для тех правил, которые считывают данные (Facts) одного типа и выводят результат другого типа, RuleBook имеетDecisions.
RuleBook может быть интегрирован с Spring с использованием Java DSL.
Здесь мы приводим простой пример «Hello, world» с использованием RuleBook. Давайте добавим его зависимость, которая полагается на модульrulebook-core:
com.deliveredtechnologies
rulebook-core
0.6.2
Теперь мы создаем правило:
public class HelloWorldRule {
public RuleBook
Наконец, основной класс:
public static void main(String[] args) {
HelloWorldRule ruleBook = new HelloWorldRule();
ruleBook
.defineHelloWorldRules()
.run(new FactMap<>());
}
6. Заключение
В этой быстрой статье мы обсудили некоторые хорошо известные библиотеки, которые предоставляют механизмы для абстракции бизнес-логики.
Как всегда, примеры из этой статьи доступны на нашемGitHub repository.