我目前正在重构从其他开发人员继承的代码库。在几个类中,我发现包含符号=,?的常量?和& (和别的)。它们用于构建URL,如下所示:
class SomeClass {
private static final String EQUALS = "=";
private static final String AMPERSAND = "&";
private static final String QUESTION_MARK = "?";
private static final String FORWARD_SLASH = "/";
// ...
public String getSomeURL() {
return ProjectConstants.BASE_URL + entityName + FORWARD_SLASH +
anotherName + QUESTION_MARK + parameterName + EQUALS + parameterValue;
}
}
我没有看到这个的好处。这种风格的原因是什么,而不仅仅是写variable + '/' + variable + "?parameterName=" + parameterValue
?
答案 0 :(得分:3)
常量很有用,但命名很差。如果它们在URL构造中使用,则它们的名称应如下所示:
private static final String PARAMETER_ASSIGNMENT = "=";
private static final String PARAMETER_SEPARATOR = "&";
private static final String QUERY_INTRODUCER = "?";
private static final String PATH_SEPARATOR = "/";
这样,他们的名字将引用他们的语义(他们应该),而不是他们的内容(整个点是 abstract 远离内容!)。
getSomeURL()
的代码将更直接地表明其真正的作用:
public String getSomeURL() {
return ProjectConstants.BASE_URL + entityName +
PATH_SEPARATOR + anotherName +
QUERY_INTRODUCER +
parameterName + PARAMETER_ASSIGNMENT + parameterValue;
}
答案 1 :(得分:0)
我认为这里没有任何深层技术原因
我看到的唯一小的东西:他们会像#34; =="不太可能发生,因为EQUALS + EQUALS显然更明显。
另一方面,这在现实中并不重要;因为实际上你会调用 helper 方法来构建这些URL。所以,一旦你得到了正确的帮助,很少有机会在那个"生成"内容。
但即便如此,我也不会使用String常量而是使用char值。