easy rules 사용 [2] RuleBook

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