2016-12-14 4 views
1

Я в настоящее время реорганизую кодовую базу, унаследованную от другого разработчика. В нескольких классах я нашел константы, содержащие символы =,? и & (и другие). Они используются для создания 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

Я думаю, что нет никаких глубоких технических причин здесь

только немного, что я вижу: они делают опечатки, как «==», менее вероятно, произойдет, поскольку РАВНО + РАВНО, очевидно, более очевидным заметить.

С другой стороны, это не должно действительно важно в действительности; потому что на самом деле вы будете называть помощниками методов для создания этих URL-адресов в любом случае. Итак, как только вы получили помощников правильно, мало шансов иметь опечатки в этом «сгенерированном» контенте.

Но даже тогда я не использовал бы строковые константы, но значения полукокса.

+0

профилактика Опечатка на самом деле является хорошей отправной точкой. Хотя, я согласен с тем, что вы говорите: вспомогательные методы должны позаботиться об этом. – marstato

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 = "/"; 

Таким образом, их имена будут ссылаться на их семантики (что они должны), а не их содержания (все точка аннотация вдали от содержимого!).

Код getSomeURL() будет гораздо более непосредственно сигнализировать, что он действительно делает:

public String getSomeURL() { 
    return ProjectConstants.BASE_URL + entityName + 
      PATH_SEPARATOR + anotherName + 
      QUERY_INTRODUCER + 
       parameterName + PARAMETER_ASSIGNMENT + parameterValue; 
} 
+0

Это более семантический, да. Но мне все еще гораздо труднее читать его, чем с помощью встроенных символов/строк. – marstato

+0

@marstato Проблема в том, что URL-адреса настолько хорошо известны, что значения констант вряд ли когда-либо изменятся. Но если вы когда-нибудь захотите адаптировать этот класс для предоставления своих данных в формате, отличном от URL-адресов, то это будет ясно. Все дело в том, что константу следует назвать всякий раз, когда вы можете дать ей лучшее имя, чем просто ее ценность. И вы * можете * в этом случае. – Angew

+0

Это действительная причина. Однако он не покрывает потери в удобочитаемости imo. – marstato

Смежные вопросы