3 回答
TA贡献1820条经验 获得超10个赞
但是之后如何创建评估?由于在您的解决方案中,每个标准都是一行……请举例说明好吗?
在我们的一个系统中,我们有一些相同的东西,用户可以在其中定义 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条经验 获得超4个赞
然后根据您的评论,您应该只为标准创建一个表,用户在其中添加一行来指定评估标准是什么。这将更安全地添加和删除,因为您不会更改实际的表属性,而是操作条目
编辑:
要使用它,只需使用一个INSERT INTO
语句,在其中将值插入到列中。
添加回答
举报