3.3 KiB
#рефакторинг #запахи_кода
Такие классы содержат поля, методы для получения и установки значений этих полей и ничего больше. Это молчаливые хранилища данных, которыми другие классы наверняка манипулируют излишне детально. Классы данных часто являются признаком размещения поведения в неправильном месте; это означает, что вы можете добиться большего прогресса, переместив его из клиента в сам класс данных. Но есть исключения, и одно из них — запись, которая используется как результат отдельного вызова функции. Ключевой характеристикой такой записи результатов является то, что она неизменяема (по крайней мере на практике). Неизменяемые поля не нужно инкапсулировать, а информация, полученная из неизменяемых данных, может быть представлена в виде полей, а не как методы доступа.
Признаки
Классы данных — это классы, которые содержат только поля и простейшие методы для доступа к ним (геттеры и сеттеры). Это просто контейнеры для данных, используемые другими классами. Эти классы не содержат никакой дополнительной функциональности и не могут самостоятельно работать с данными, которыми владеют
Причины появления
Это нормально, когда класс в начале своей жизни содержит всего лишь несколько публичных полей (а может даже и парочку геттеров/сеттеров). Тем не менее, настоящая сила объектов заключается в том, что они могут хранить типы поведения или операции над собственными данными.
Рефакторинги
- Инкапсуляция записи
- Удаление метода установки значения
- Перенос функции
- Извлечение функции
- Разделение этапа
Результат
- Улучшает понимание и организацию кода. Операции над определёнными данными теперь собраны в одном месте, их не надо искать по всему коду
- Может вскрыть факты дублирования клиентского кода

