0
我要創建一個CRUD頁面管理數值範圍的規則來確定的值應該去哪個類別中(對於值< 10,返回「小」,對值> = 10 & < 20,回 「中」,等等)。我需要這些規則存儲在MySQL和評估他們的Java(確定給定值的類別等)。我覺得我正在通過存儲開始/結束範圍值和開始/結束運算符(如VARCHAR)並使用一堆IF語句轉換爲Java條件等來重新發明輪子...如何存儲和評估表驅動範圍規則
這裏是我在考慮的表結構...
CREATE TABLE `category_range` (
`category_name` varchar(36) NOT NULL,
`range_start_op` varchar(2),
`range_start_val` decimal(10,2),
`range_end_op` varchar(2),
`range_end_val` decimal(10,2));
--example values
'Small', null, null, '<', 10.0
'Medium', '>=', 10.0, '<', 20.0
'Large', '>=', 20, null, null
然後在Java中,定義一些常量,運營商,然後做這個決定一場比賽...
if (operation.equals(OP_EQUAL)) {
return value == rangeValue;
} else if (operation.equals(OP_NOT_EQUAL)) {
return value != rangeValue;
} else if (operation.equals(OP_GREATER_THAN)) {
return value > rangeValue;
} else if (operation.equals(OP_GREATER_THAN_OR_EQUAL)) {
return value >= rangeValue;
} else if (operation.equals(OP_LESS_THAN)) {
return value < rangeValue;
} else if (operation.equals(OP_LESS_THAN_OR_EQUAL)) {
return value <= rangeValue;
}
是否有一個圖案和/或圖書館,以幫助我更優雅地做到這一點?
更新:根據一些反饋,這裏是我看中了...輕微的妥協在靈活性方面,但更乾淨
CREATE TABLE `category_range` (
`category_name` varchar(36) NOT NULL,
`min_value` decimal(10,2),
`max_value' decimal(10,2));
/**
* determines if the specified value matches the given range
* minValue is inclusive (value >= min)
* maxValue is exclusive (value < max)
* min/max both the same assumes exact value match
* min/max both null assumes match all values
* @param value
* @return
*/
public boolean doesValueMatchRange(double value) {
if (minValue == null && maxValue == null) {
return true;
}
else if (minValue == null) {
return value < maxValue;
}
else if (maxValue == null) {
return value >= minValue;
}
else if (minValue.equals(maxValue)) {
return value == minValue.doubleValue();
}
else {
return (value > minValue) && (value <= maxValue);
}
}
感謝tadman,但我確實需要不同的運營商(==,!=,> =,>,<,<=)用於其他類別/規則變化的靈活性... – 2012-01-05 21:00:05
了基於你的建議的混合方法...謝謝 – 2012-01-06 18:35:54