2014-02-10 1 views
0

거의 100 개의 규칙이있는 규칙 파일 (.drl)이 있습니다. 그러나 나는 어느 시점에서 어떤 규칙을 효과적으로 선택할 수있는 유연성을 사용자에게 부여하고자합니다. 사용자가 규칙을 선택하고 선택할 수 있도록 원하는 규칙을 별도의 .drl 파일로 가져 오는 방법이 있다면 생각 중입니다.마스터 규칙 파일에서 규칙을 가져 오는 방법

하나의 .drl 파일 규칙을 다른 .drl 파일로 가져올 수 있습니까? 그렇지 않은 경우, 사용자가 어떤 시점에서 효과적인 규칙을 선택/선택할 수있는 옵션을 갖도록하려면 어떻게해야합니까?

또한 하나의 파일에 100 개의 규칙이있는 것은 효과적이지 않으며 한 줄/이름으로 참조 할 수 있습니다.

힌트 pl?

+0

왜 "하나의 파일에 100 개의 규칙이 없으면 효과적입니까?" 100 개의 규칙은 그리 많지 않습니다. – laune

+0

모든 규칙은 하나의 파일에 집중되어 있으며 관련이 없습니다. 이러한 규칙을 비즈니스 영역을 기반으로하는 다른 .drl 파일로 분리하고 싶습니다. –

답변

1

하나의 DRL에서 다른 DRL로 규칙에 대한 "가져 오기"가 없습니다.

문제점을 해결하기 위해 수행해야 할 작업은 규칙 선택에 필요한 세분성에 따라 다릅니다.

N 개의 정적 조합이있는 경우 N 개의 룰베이스를 빌드하고 사용자가 룰베이스를 선택할 수있게 할 수 있습니다. 이것은 깨끗하고 통제되고 테스트 할 수 있습니다.

세트 수가 서로 다른 경우 집합 의제 그룹을 사용하십시오. 사용자가 의제 그룹을 선택하면 해당 그룹의 규칙 만 활성화됩니다. (세트가 분리되어 있지 않은 경우, 다른 의제 그룹에서 다른 이름을 사용하여 규칙을 복제하는 대신에 의제 그룹을 계속 사용할 수 있습니다. 좋지 않은데, 좋지 않습니다.)

임의의 동적 선택의 경우, 어떤 메커니즘을 고안해야한다. 예 :

rule "rule1" 
when 
    Select(name == "rule1") 
    All(...) 
    Original(...) 
    Patterns(...) 
then ... end 

새 선택 삽입 ("규칙 1")은 철회를 취소합니다. 방법의 선택에 따라하는 것은, 당신은 또한 "기능"을 구현할 수 있습니다되어야한다 :

rule "rule x" # part of feature f1 and f2 
when 
    Select(featureSet contains Feature.f1 || Feature.f2) 
    All(...) 
    Original(...) 
    Patterns(...) 
then ... end 
당신은 기능의 조합을 확인하는 규칙을 작성할 수 있습니다

, 예를 들어,

rule "feature check" 
when 
    Select(featureSet contains Feature.black && Feature.white) 
then 
    ... cant have black *and* white at the same time ... 
end 
+0

당신은 select/all/original/patterns에 관한 약간의 문헌이나 예제를 가르쳐 줄 수 있습니까? 나는/그 다음/끝과 그 이상으로 아무것도 사용하지 않았다. –

+0

Select는 정의해야 할 클래스입니다. 전체/원본/패턴은 게시하지 않은 항목, 즉 규칙의 내용을 나타내는 것으로 간주됩니다. – laune

관련 문제