29 lines
3.3 KiB
Markdown
29 lines
3.3 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[Pasted image 20241113230738.png]]
|
||
|
||
> Такие классы содержат поля, методы для получения и установки значений этих полей и ничего больше. Это молчаливые хранилища данных, которыми другие классы наверняка манипулируют излишне детально.
|
||
> Классы данных часто являются признаком размещения поведения в неправильном месте; это означает, что вы можете добиться большего прогресса, переместив его из клиента в сам класс данных. Но есть исключения, и одно из них — запись, которая используется как результат отдельного вызова функции. Ключевой характеристикой такой записи результатов является то, что она неизменяема (по крайней мере на практике). Неизменяемые поля не нужно инкапсулировать, а информация, полученная из неизменяемых данных, может быть представлена в виде полей, а не как методы доступа.
|
||
|
||
### **Признаки**
|
||
Классы данных — это классы, которые содержат только поля и простейшие методы для доступа к ним (геттеры и сеттеры). Это просто контейнеры для данных, используемые другими классами. Эти классы не содержат никакой дополнительной функциональности и не могут самостоятельно работать с данными, которыми владеют
|
||
|
||
### **Причины появления**
|
||
Это нормально, когда класс в начале своей жизни содержит всего лишь несколько публичных полей (а может даже и парочку геттеров/сеттеров). Тем не менее, настоящая сила объектов заключается в том, что они могут хранить типы поведения или операции над собственными данными.
|
||
|
||
![[Pasted image 20241113231226.png]]
|
||
|
||
### **Рефакторинги**
|
||
- Инкапсуляция записи
|
||
- Удаление метода установки значения
|
||
- Перенос функции
|
||
- Извлечение функции
|
||
- Разделение этапа
|
||
|
||
### **Результат**
|
||
- Улучшает понимание и организацию кода. Операции над определёнными данными теперь собраны в одном месте, их не надо искать по всему коду
|
||
- Может вскрыть факты дублирования клиентского кода
|
||
|
||
### **Ссылки**
|
||
- https://refactoring.guru/ru/smells/data-class
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |