Магический литерал при преобразовании URL


Исходный код

protected String[] processURL(String url) {
    StringBuffers = newStringBuffer(url);
    StringBuffer AfterRemoval = s.delete(0, 27);

Что не так в исходном коде

Здесь от урла отрезается начальная часть, по всей вероятности — доменное имя плюс одна-две верхних подпапки.

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

Поэтому, более сложный, но безусловно правильный путь — парсить и преобразовывать урл с помощью библиотечных методов.

Другой важный недочёт исходного кода — слишком общие названия. Название метода processURL не рассказывает, что конкретно делает этот метод, какое именно преобразование урла.

Название переменной AfterRemoval не называет смысл значения, которое в этой переменной хранится. Вместо этого оно говорит об операции, которая была выполнена для получения значения. Это всё равно, что написать в меню ресторана «что-то, что было сварено в кастрюле» и «что-то, что было пожарено на сковороде».

Вариант рефакторинга

import java.net.URL;
protected String[] getPageRelativePath(String url) {
    URL parsed_url = newURL(url);
    String full_path = parsed_url.getPath();
    String[] parsed_path = full_path.split('\\/', 2);
    String relative_path = parsed_path[1];