3 回答

TA貢獻1820條經(jīng)驗 獲得超10個贊
但是之后如何創(chuàng)建評估?由于在您的解決方案中,每個標準都是一行……請舉例說明好嗎?
在我們的一個系統(tǒng)中,我們有一些相同的東西,用戶可以在其中定義 0 到無限的標準。
因此,您需要使用行。
詳細地說,用戶可以附加一個或多個filters(它們是or'd),其中每個過濾器可以包含一個或多個criterias(它們是and'd)
從代碼端評估看起來像這樣。(這不是復制/粘貼代碼,但可能會給您一個想法)。environmentVariables基本上是一個包含我們嘗試應用過濾器的對象屬性的地圖:
public static boolean evaluate(Filter filter, Map<String, Object> environmentVariables) {
for (Criteria criteria : filter.getCriterias()) {
if (!evaluateCriteria(criteria, environmentVariables)) {
// one missmatch -> false.
return false;
}
}
// all criterias matched, that filter is true.
return true;
}
public static boolean evaluateCriteria(Criteria criteria, Map<String, Object> environmentVariables) {
if (environmentVariables != null) {
if (environmentVariables.containsKey(criteria.getKey())) {
return evaluateCriteria(criteria, environmentVariables.get(criteria.getKey()));
}
}
return false;
}
private static boolean evaluateCriteria(Criteria criteria, Object value) {
switch (criteria.getOperator()) {
case LIKE:
if (value != null) {
return value.toString().toLowerCase().contains(criteria.getValue().toString().toLowerCase());
} else {
return false;
}
//other OperatorTypes
case STARTSWITH: // code...
case ENDSWITH: // code...
case EQUALS: // code...
case GREATER_THAN: // code...
case GREATER_THAN_EQUAL: // code...
case LESSER_THAN: // code...
case LESSER_THAN_EQUAL: // code...
default:
throw new UnsupportedOperationException(criteria.getOperator() + " is not defined");
}
}

TA貢獻1783條經(jīng)驗 獲得超4個贊
然后根據(jù)您的評論,您應該只為標準創(chuàng)建一個表,用戶在其中添加一行來指定評估標準是什么。這將更安全地添加和刪除,因為您不會更改實際的表屬性,而是操作條目
編輯:
要使用它,只需使用一個INSERT INTO
語句,在其中將值插入到列中。
添加回答
舉報