Рубрики
Без рубрики

Список двигателей правил на Java

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

Автор оригинала: baeldung.

Список двигателей правил на Java

1. Обзор

В этой статье мы пройдемся по самым популярным двигателям правил для Java.

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

В Java-мире большинство библиотек двигателей правил реализуют стандарт JSR94, известный как Java Правило API Двигатель .

2. Друолы

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

Если вы хотите узнать больше, введение в Drools доступна здесь , наряду со статьей об интеграции с весной .

3. Таблетки OpenL

OpenL таблетки является системой управления бизнес-правилами и двигателем бизнес-правил, основанным на таблицах решений 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
}

И enum, который будет представлять результат применяемых правил:

public enum Greeting {
    // ...
}

Дело класс обертывает Пользователь объект с переменными, которые приводят к результатам:

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

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

public interface IRule {
    void helloUser(Case aCase, final 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 – это java-структура, которая использует Java 8 lambdas и шаблон цепи ответственности для определения правил с использованием простого подхода 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 .