3 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
但是之后如何創(chuàng)建評估?由于在您的解決方案中,每個(gè)標(biāo)準(zhǔn)都是一行……請舉例說明好嗎?
在我們的一個(gè)系統(tǒng)中,我們有一些相同的東西,用戶可以在其中定義 0 到無限的標(biāo)準(zhǔn)。
因此,您需要使用行。
詳細(xì)地說,用戶可以附加一個(gè)或多個(gè)filters(它們是or'd),其中每個(gè)過濾器可以包含一個(gè)或多個(gè)criterias(它們是and'd)
從代碼端評估看起來像這樣。(這不是復(fù)制/粘貼代碼,但可能會給您一個(gè)想法)。environmentVariables基本上是一個(gè)包含我們嘗試應(yīng)用過濾器的對象屬性的地圖:
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貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
然后根據(jù)您的評論,您應(yīng)該只為標(biāo)準(zhǔn)創(chuàng)建一個(gè)表,用戶在其中添加一行來指定評估標(biāo)準(zhǔn)是什么。這將更安全地添加和刪除,因?yàn)槟粫膶?shí)際的表屬性,而是操作條目
編輯:
要使用它,只需使用一個(gè)INSERT INTO
語句,在其中將值插入到列中。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
添加具有兩個(gè)外來特征作為主鍵的額外表格標(biāo)準(zhǔn)......正如我所說的最后一個(gè)存在兩種解決方案,這個(gè)你已經(jīng)畫了
添加回答
舉報(bào)