Замена параметров объектом.
В ваших методах встречается повторяющаяся группа параметров.
Замените эти параметры объектом.
##Пример
double amountInvoicedIn(Date start, Date end) {
// ...
}
double amountReceivedIn(Date start, Date end) {
// ...
}double amountInvoicedIn(DateRange range) {
// ...
}
double amountReceivedIn(DateRange range) {
// ...
}
class DateRange {
private Date start;
private Date end;
DateRange(Date start, Date end) {
this.start = start;
this.end = end;
}
}##Зачем делать рефакторинг
Одинаковые группы параметров зачастую встречаются не в единственном методе. Это приводит к дублированию кода, как самих параметров, так и частых операций над ними. Как только вы сведёте параметры в одном классе, вы сможете переместить туда и методы обработки этих данных, очистив от этого кода другие методы.
##Преимущества
-
Улучшает читабельность кода. Вместо пачки разнообразных параметров вы видите один объект с понятным названием.
-
Одинаковые группы параметров тут и там создают особый род дублирования кода, при котором вроде бы не происходит вызова идентичного кода, но все время встречаются одинаковые группы параметров и аргументов.
##Как делать рефакторинг
-
Создайте новый класс, который будет представлять вашу группу параметров. Сделайте так, чтобы данные объектов этого класса нельзя было изменить после создания.
-
В методе, к которому применяем рефакторинг, добавьте новый параметр, в котором будет передаваться ваш объект-параметр. Во всех вызовах метода передавайте в этот параметр объект, создаваемый из старых параметров метода.
-
Теперь начинайте по одному удалять старые параметры из метода, заменяя их в коде полями объекта-параметра. Тестируйте программу после каждой замены параметра.
-
По окончанию оцените, есть ли возможность и смысл перенести какую-то часть метода (а иногда и весь метод) в класс объекта-параметра. Если так, используйте перемещение метода или извлечение метода, чтобы осуществить перенос.