Список правил движков в Java

Список правил движков в 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 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 repository.