2014-02-10 65 views
0

我有幾乎100規則的規則文件(.drl)。不過,我想讓用戶能夠靈活選擇哪些規則在任何時候都有效。 我在想如果有辦法將所需的規則導入單獨的.drl文件,以便用戶可以選擇並選擇規則如何從主規則文件導入規則

是否可以將一個.drl文件的規則導入其他.drl文件?如果不是,我如何確保用戶可以選擇/選擇在任何時候都有效的規則。

另外,在一個文件中有100個規則是無效的,並且將它們用單行/名稱引用將是可讀的。

提示pl?

+0

爲什麼你說「在一個文件中有100條規則是無效的」? 100條規則並不多。 – laune

+0

現在所有規則都集中在一個文件中,它們之間沒有任何關係。我想根據業務領域將這些規則分成不同的.drl文件。 –

回答

1

對於從一個DRL到另一個DRL的規則沒有「導入」。

如何解決您的問題取決於所需的規則選擇粒度。

如果有少量的靜態組合,您可以構建N個規則庫並讓用戶選擇一個規則庫。這是乾淨的,可控和可測試的。

如果有多個不相交組,請使用議程組。用戶選擇議程組,只有該組中的規則處於活動狀態。 (如果這些集合不是不相交的,則仍然可以使用議程組,但需要在不同議程組中使用不同名稱的規則進行復制,否則不建議使用不同名稱)。設計一些機制。例如:

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

插入新的Select(「rule1」)選擇,縮回縮進。根據選擇的方式應該進行,還可以實現「功能」:

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

你能指點我一些關於選擇/全部/原創/模式的文獻或例子嗎?我用/時/結束,沒有任何超越。 –

+0

Select是您必須定義的課程。所有/原創/模式是作爲您未發佈內容的替身,即您規則的內容。 – laune