1

也许这是一个有点愚蠢的问题,但我无法获得正确的变量名。目前我得到了相反的方法,但在我看来它没有多大意义。

package dao.constraint;

public class Constraint<T> {
    public Operation operation;
    public boolean negated;
    public T data;
    public String field;

    public Constraint(final Operation operation, final boolean negated, final T data, final String field) {
        this.operation = operation;
        this.negated = negated;
        this.data = data;
        this.field = field;
    }
}

背景信息:这与将在 SQL 选择查询中使用的约束有关。例如new Constraint<String>(Operation.IS, false, "me", "username");,将成为用户名等于的查询的一部分"me"。并且new Constraint<String>(Operation.IS, true, "me", "username");将是用户名等于的查询的一部分"me"

如您所见,命名令人困惑,为了逻辑和未来的可读性,我想转而使用布尔值,但是如何调用否定/否定的对立面?

我可以称它为isNotNegated,但这对我来说似乎不是一个很好的名字。

更多背景知识:在 SQL 代码中,它将WHERE username = "me"分别按字面意思实现,WHERE NOT(username = "me")因此我选择在negated这里临时调用它。

问候。

4

2 回答 2

0

为了摆脱布尔标志,我将通过引入两个工厂方法并将原始构造函数设为私有来重构代码。

诚然,我不经常做 Java 的事情,所以请原谅可能错误的语法 :)

private Constraint(final Operation operation, final boolean negated, final T data, final String field) {
    this.operation = operation;
    this.negated = negated;
    this.data = data;
    this.field = field;
}

public static<T> Constraint<T> createConstraint(final Operation operation, final T data, final String field) {
    return new Constraint<T>(operation, false, data, field);
}

public static<T> Constraint<T> createNegativeConstraint(final Operation operation, final T data, final String field) {
    return new Constraint<T>(operation, true, data, field);
}

要使用:

Constraint<String> foo = Constraint.createConstraint(Operation.IN, "hello", "field");
于 2013-06-29T14:34:01.303 回答
0

我真的建议将 Constraint 设置为具有各种实现的接口,如 And、Or、Not、In,无论您需要什么,正如您在改进构建器的其他问题中所建议的那样。这个建议的原因是 * 一个约束的否定永远不会改变那个约束,所以为什么不把这个决定放到一个类中。否则,约束是某种“标记”类,这是错误层次结构的明显标志。* 引入这些不同的实现可以轻松组合约束,因此更加灵活。

于 2013-06-29T14:41:11.333 回答