Логотип ConstructiCat
CodeBust.
Навигация по разделу ▾

Добавление параметра.

Проблема

Методу не хватает данных для осуществления каких-то действий.

Решение

Создайте новый параметр, чтобы передать эти данные.

##Пример

До
void charge() {
  bank.transfer(amount);
}
После
void charge(Date asOf) {
  bank.transfer(amount, asOf);
}

##Зачем делать рефакторинг

Вам необходимо внести какие-то изменения в метод. Эти изменения требуют дополнительной информации или данных, которые ранее в метод не подавались.

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

##Преимущества

  • Метод получает нужные данные явно от вызывающего кода: зависимость видна в его сигнатуре, а не спрятана в состоянии объекта.

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

##Как делать рефакторинг

  1. Проверьте, не определён ли метод в суперклассе или подклассе. Если метод в них присутствует, нужно будет повторить все шаги также в этих классах.

  2. Следующий шаг важен, чтобы сохранить работоспособность программы во время рефакторинга. Итак, создайте новый метод, скопировав старый, и добавьте в него требуемый параметр. Замените код старого метода вызовом нового метода. Вы можете подставить любое значение в новый параметр (например null для объектов или ноль для чисел).

  3. Найдите все обращения к старому методу и замените их обращениями к новому методу.

  4. Удалите старый метод. Этот шаг неосуществим, если старый метод является частью публичного интерфейса. В этом случае старый метод нужно пометить как устаревший (deprecated).