RuleBook Maven 추가
RuleBook은 Java 8 람다와 Chain of Responsibility Pattern(책임 연쇄 패턴, 명령 객체와 일련의 처리 객체를 포함하는 디자인 패턴)을 활용하여 간단한 BDD 접근 방식을 사용하여 규칙을 정의하는 java framework이다. RuleBook을 사용하여 간단하게 easy rules를 제어해보도록 하겠다.
<!-- Rule Engine / Rule Book -->
<dependency>
<groupId>com.deliveredtechnologies</groupId>
<artifactId>rulebook-core</artifactId>
<version>0.6.2</version>
</dependency>
RuleBook을 활용한 규칙 생성
easy rules 사용 [1]에서 생성한 Easy Rules class 및 메인이 되는 class를 일부 수정하도록 하겠다. 우선 규칙을 정의하는 EasyRulesController를 다음과 같이 수정한다.
import org.jeasy.rules.annotation.Action;
import org.jeasy.rules.annotation.Condition;
import org.jeasy.rules.annotation.Rule;
import com.deliveredtechnologies.rulebook.lang.RuleBookBuilder;
import com.deliveredtechnologies.rulebook.model.RuleBook;
@Rule(name = "EasyRulesController", description = "EasyRulesTest")
public class EasyRulesController {
@Condition
public boolean when() {
return true;
}
@Action
public void then() throws Exception {
System.out.println(" ┌────────── ──────────");
System.out.println(" EasyRulesTest !!!");
System.out.println(" └────────── ──────────");
}
public RuleBook<Object> defineEasyRulesTest() {
return RuleBookBuilder
.create()
.addRule(rule -> rule.withNoSpecifiedFactType()
.then(f -> System.out.println(" Hellow ~ !")))
.addRule(rule -> rule.withNoSpecifiedFactType()
.then(f -> System.out.println(" It works ~ !")))
.build();
}
}
다음으로 메인이 되는 class를 수정한다.
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.core.DefaultRulesEngine;
import com.deliveredtechnologies.rulebook.FactMap;
import easyRulesTest.controller.EasyRulesController;
public class Launcher {
public static void main(String[] args) {
System.out.println("┌────────── ────────── ──────────");
System.out.println("EasyRules Start");
// facts 생성
Facts facts = new Facts();
// rules 생성
Rules rules = new Rules();
rules.register(new EasyRulesController());
// rules engine 생성
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
System.out.println("EasyRules End");
System.out.println("└────────── ────────── ──────────");
System.out.println();
System.out.println("┌────────── ────────── ──────────");
System.out.println("RuleBook Start");
EasyRulesController easyRulesController = new EasyRulesController();
easyRulesController
.defineEasyRulesTest()
.run(new FactMap<>());
System.out.println("RuleBook End");
System.out.println("└────────── ────────── ──────────");
}
}
수정 완료 후 project 실행 시, 다음과 같은 console 화면을 볼 수 있다.
앞서 생성하고 수정한 규칙을 정의하는 class(EasyRulesController)가 정상적으로 처리되는 모습이다.
[ 출처 ]
Chain of Responsibility Pattern : https://ko.wikipedia.org/wiki/책임_연쇄_패턴
Easy Rules 및 RuleBook 사용법 : https://www.baeldung.com/java-rule-engines
728x90
'Java > easy rules' 카테고리의 다른 글
easy rules 사용 [6] YML 예시 (0) | 2021.08.23 |
---|---|
easy rules 사용 [5] YML (0) | 2021.08.19 |
easy rules 사용 [4] jeasy API(Controller 추가 없음) (0) | 2021.08.19 |
easy rules 사용 [3] MVEL Rule (0) | 2021.08.19 |
easy rules 사용 [1] jeasy API(Controller 추가 있음) (0) | 2021.08.19 |