위의 CER 규칙 세트 해석기를 사용하면 문자열을 통해 규칙 클래스와 속성 이름을 참조할 수 있습니다.
이 해석기를 사용하면 규칙 세트를 완전히 동적으로 구성할 수 있지만 테스트를 위해 문자열을 사용하고 속성 값을 캐스트해야 하는 과정은 번거로울 수 있습니다. 규칙 클래스 또는 속성 이름을 잘못 입력하거나 잘못된 유형의 캐스트를 사용하는 경우 코드가 오류 없이 컴파일될 수는 있지만 런타임 시 오류가 발생합니다.
CER에는 규칙 클래스의 Java 랩퍼 클래스를 생성할 수 있는 코드 생성기가 포함되어 있습니다. 생성된 이러한 클래스를 사용하면 테스트 코드 작성이 간단해지며, 이러한 클래스를 사용하지 않는 경우 런타임 시에만 발생하는 문제점을 컴파일러가 발견할 수 있습니다.
이제 HelloWorldRuleSet를 실행하는 코드를 다음과 같이 다시 작성합니다.
package curam.creole.example; import junit.framework.TestCase; import curam.creole.execution.session.RecalculationsProhibited; import curam.creole.execution.session.Session; import curam.creole.execution.session.Session_Factory; import curam.creole.execution.session.StronglyTypedRuleObjectFactory; import curam.creole.ruleclass.HelloWorldRuleSet.impl.HelloWorld; import curam.creole.ruleclass.HelloWorldRuleSet.impl.HelloWorld_Factory; import curam.creole.storage.inmemory.InMemoryDataStorage; public class TestHelloWorldCodeGen extends TestCase { /** * 독립형 Java 애플리케이션으로 클래스를 실행합니다. */ public static void main(final String[] args) { final TestHelloWorldCodeGen testHelloWorld = new TestHelloWorldCodeGen(); testHelloWorld.testUsingGeneratedTestClasses(); } /** * 명백한 유형 지정 및 쉬운 코딩 테스트를 위해 CER 생성 * 테스트 클래스를 사용하는 단순 테스트 케이스입니다. */ public void testUsingGeneratedTestClasses() { /* 명백하게 유형 지정된 세션 시작 */ final Session session = Session_Factory.getFactory().newInstance( new RecalculationsProhibited(), new InMemoryDataStorage( new StronglyTypedRuleObjectFactory())); /* * 생성된 팩토리를 사용하여 필수 규칙 * 클래스의 규칙 오브젝트 인스턴스 작성 */ final HelloWorld helloWorld = HelloWorld_Factory.getFactory().newInstance(session); /* * 생성된 액세서를 사용하여 "greeting" 규칙 속성에 * 도달합니다. 캐스트할 필요가 없으며 속성 이름에 * 오류가 있으면 컴파일 오류가 발생합니다. */ final String greeting = helloWorld.greeting().getValue(); System.out.println(greeting); assertEquals("Hello, world!", greeting); } }
TestHelloWorldInterpreted 코드와의 다음 비교를 참고하십시오.
생성된 코드에는 로컬 시스템의 규칙 세트에 대한 절대 경로가 포함되어 있으므로 여러 시스템에 이식할 수 없습니다.
특히 규칙 세트가 동적으로 변경될 수 있는 프로덕션 환경에서 생성된 코드를 사용하지 않아야 합니다.