我有以下Drools規則文件,我向其發送的地圖填充了自定義對象(NodeElement),map是一個全局變量,因爲它必須被所有規則訪問,並且有另一個全局變量錯誤,當規則失敗時填充。我已經使用了eval並能夠成功執行它。經過一番研究,發現eval有一些性能問題?如何訪問drools中的自定義對象的地圖
我的問題是...
1)性能問題可以忽略不計?
2)是使用eval一個很好的做法? 3)如果我不得不重寫這些規則嗎?這是做到這一點的最佳方式?
import java.util.Map;
import com.infodev.pojo.NodeElement;
import com.main.Errors;
import com.validation.DateValidation;
global java.util.Map map;
global com.main.Errors errors;
rule "Fixed/Floating ccy rule"
when
eval(!((NodeElement)map.get("FixedCurrency")).getValue().equals(((NodeElement)map.get("FloatingCurrency")).getValue()))
then
errors.addError("Currency", "Fixed currency should be same as Floating currency");
end
rule "Payment/Settlement date rule"
when
eval(!(DateValidation.paymentDateValidation(((NodeElement)map.get("tradeDate")).getValue(),((NodeElement)map.get("paymentDate")).getValue())))
then
errors.addError(map.get("paymentDate").toString(), "Payment date should be after trade date");
end
和地圖是:
Map<String, NodeElement> map = new HashMap<String, NodeElement>();
map.put("FixedCurrency", new NodeElement("FixedCurrency", "USD"));
map.put("FloatingCurrency", new NodeElement("FloatingCurrency", "UD"));
map.put("tradeDate", new NodeElement("tradeDate", "2012-01-22"));
map.put("paymentDate",new NodeElement("paymentDate", "2012-01-2"));
爲什麼不去完整的方式,並使用'FixedCurrency','TradeDate'等作爲類型名稱。這將*真正*使它可讀;-) – laune
感謝它works.But只是問是否有更好的方法來做到這一點?它可以更有效地實現嗎? –