Лекция: METHOD OBJECT (МЕТОД В ОБЪЕКТ)
Каким образом лучше всего реализовать сложный метод, использующий несколько параметров и локальных переменных? Преобразуйте метод в отдельный объект.
Как
1. Создайте класс с таким же количеством параметров, как и оригинальный метод.
2. Сделайте локальные переменные метода экземплярными переменными нового класса.
3. Определите в новом классе метод с именем run(). Тело этого метода будет таким же, как и тело оригинального метода.
4. В оригинальном методе создайте новый объект и обратитесь к методу run() этого объекта.
Зачем
Объекты-методы полезны в качестве подготовительного этапа перед добавлением в систему абсолютно нового вида внутренней логики. Например, представьте, что для вычисления обшего денежного потока используется несколько разных методов, позволяющих учесть в вычислении несколько разных компонентов общего денежного потока. Вначале вы можете создать объект-метод, вычисляющий общий денежный поток первым способом. Затем вы можете описать следующий способ вычислений при помощи тестой меньшего масштаба. После этого добавление в программу нового способа вычислений будет несложным делом.
Объекты-методы также позволяют упростить код. в отношении которого неудобно использовать Extract Method (Выделение метода). В некоторых ситуациях вы вынуждены иметь дело с блоком кода» который работает с обширным набором временных переменных и параметров, и каждый раз. когда вы пытаетесь выделить хогя бы часть этого кода в отдельный метод, вы вынуждены переносить в новый метод пять или шесть временных переменных и параметров. Результирующий выделенный метод выглядит ничем не лучше, чем изначальный код, так как его сигнатура слишком длинна. В результате создания обьекга-метода вы получаете в свое распоряжение новое пространство имен, в рамках которого вы можете извлекать методы, без необходимости передачи и них каких-либо параметров.