Как осуществить рефакторинг быстро развивающийся код?

Его можно заменить на анонимный класс:

Function> asSet = new Function<>() {
    @Override
    public HashSet apply(String s) {
        return new HashSet<>() {{
            do_something(s);
        }};
    }
};

Вы просто реализуете метод apply из Function, который представляет собой функциональный интерфейс :

[117 ] Обратите внимание, что экземпляры функциональных интерфейсов можно создавать с помощью лямбда-выражений, ссылок на методы или ссылок на конструкторы.

blockquote>

Подробнее Что такое функциональный интерфейс в Java 8?

6
задан Gabriele Petronella 2 November 2013 в 18:04
поделиться

9 ответов

Не тратьте так много времени, осуществляя рефакторинг!

Когда Вы о, вносят изменение в части кода, полагают, что рефакторинг его делает изменение легче.

После внесения изменения осуществите рефакторинг снова для чистки ущерба, нанесенного тем изменением.

В обоих случаях сделайте рефакторинги маленькими и сделайте их быстро и идите дальше.

Вы не должны сохранять свой код нетронутым в любом случае, но помнить, что легче пойти быстро, если Вы хорошо учли код для работы в (и если у Вас есть хорошие модульные тесты, конечно).

12
ответ дан 8 December 2019 в 04:31
поделиться

Разработка через тестирование:

Красный, Зеленый, Осуществить рефакторинг. Промывка, повториться.

Так как это - один из шагов в каждом цикле, Вы заметите, что это - БОЛЬШОЙ обычно незначительный рефакторинг, происходящий. Это - способ, которым это должно быть.

5
ответ дан 8 December 2019 в 04:31
поделиться

Очистите код немного за один раз. Всегда, когда Вы касаетесь класса, попытайтесь оставить инструмент для очистки класса, которым это было перед касанием его ("правило бойскаута"). Рефакторинг лучше всего сделан в очень небольших шагах, но очень часто.

Вещи как переименование некоторой переменной, разделяя метод и т.д. занимают только несколько секунд или минут. Большие рефакторинги, такие как разделение или присоединение к классам, может занять час или два (и Вы делаете его в небольших шагах, так, чтобы все тесты передавали по крайней мере каждые пять минут - иначе Вы ввели Ад Рефакторинга, и необходимо вернуться к последнему известному рабочему состоянию). Если требуются дни или недели для Вас для рефакторинга чего-то, то это больше "не осуществляет рефакторинг" - это больше похоже на перезапись.

Статья об этой теме: http://blog.objectmentor.com/articles/2007/07/20/whats-your-unit-of-measure

2
ответ дан 8 December 2019 в 04:31
поделиться

Ваша ситуация довольно знакома мне. При выполнении следственного кодирования часто Вы понятия не имеете, чем "правильная" абстракция будет, и поскольку Вы говорите, что это может измениться с каждой новой идеей.
Другие плакаты предложили:

  • Непрерывный маленький рефакторинг, который помогает постараться не входить в ситуацию вложенного множества крыс
  • Разработка через тестирование, которая помогает найти хорошие, допускающие повторное использование абстракции. Важно отметить, что TDD меньше о тестировании, чем о выполнении хороших проектов!

Однако для кода аналитического исследования существует другая стратегия: прототип. Это, кажется, то, что Вы в настоящее время делаете: кодирование как можно быстрее для доказательства понятия. Нет ничего неправильно с этим, но прототип должен всегда быть одноразовым. Настройте его, пока Вы не будете иметь весь необходимый вход и знание, затем выбросите код и запуститесь с TDD и непрерывного рефакторинга и всего Вашего другого "выполнения вещей правильные" стратегии.

Не сохраняйте ни один код. Не делайте вставки копии ничто. Не вернитесь к нему. Только запустите со своего нового знания.

5
ответ дан 8 December 2019 в 04:31
поделиться

Вставьте его Распределенный SCM как Мерзавец, по крайней мере, тот путь, когда Вы повреждаетесь, что-то осуществляющее рефакторинг Вас может инвертировать время делимым образом для нахождения фиксации до изменения, а также способности работать над изменениями и фиксировать их в ответвлениях, не вмешиваясь в работу других.

Слияние Ответвления мерзавцев является большим для вещей как это, и Вы будете знать легко, если 2 человека внесли несовместимые изменения параллельно, не имея необходимость волноваться об остальной части кода.

По вышеупомянутым причинам я также создал бы отдельное ответвление в репозитории только для кода факторинга ре с и сохранил бы обновляемым регулярно. Таким образом, мало того, что другие не вмешаются в Ваш успех, но и они могут следить за ним и видеть изменения в нем, которые в конечном счете поразят основное ответвление, таким образом, они смогут заблаговременно кодировать вокруг тех изменений.

1
ответ дан 8 December 2019 в 04:31
поделиться

Иногда переписывание является единственным выбором. Это, кажется, имеет место.

0
ответ дан 8 December 2019 в 04:31
поделиться

Если Вы уже знаете, где существует дублирование, Вам не требуются несколько дней для рефакторинга его далеко.

0
ответ дан 8 December 2019 в 04:31
поделиться

CloneDR находит повторяющийся код, как точные копии, так и почти не совпадающие, в больших исходных системах, параметризованный с помощью языкового синтаксиса. Он поддерживает Java, C #, COBOL, C ++, PHP и многие другие языки.

Когда он показывает параметризованную абстракцию набора найденных клонов, он, по сути, предлагает , чтобы вы реорганизовали код с этой абстракцией. реализован (как метод, функция, класс, ...).

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

Еще более примечательно то, что когда он показывает привязки параметров, используемые на каждом сайте клона, необходимые для вызова абстракции, он часто показывает ошибочный экземпляр клона, легко распознается, когда связанные параметры концептуально несовместимы. Если параметр привязан к переменным с именем ГГГГ-ММ-ДД, и одна из них - ГГ-ММ-ДД, тип параметра «это 4-значный год» выглядит нарушенным, и в этом случае существует неисправное исправление проблемы 2000 года. Поэтому изучение привязок клонов часто обнаруживает ошибки.

0
ответ дан 8 December 2019 в 04:31
поделиться

Это очень распространенная проблема в научных вычислениях. Некоторые из наиболее эффективных идей по уменьшению размера и сложности кода требуют использования предположений, а наука требует, чтобы вы постоянно меняли эти предположения.

Все, что вы можете сделать, это попытаться рефакторизовать свой код по ходу дела, и постараться не вписываться ни в какие углы. Также работайте с хорошими людьми, которые понимают, как важно не создавать беспорядок.

.
0
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: