3.8 KiB
#рефакторинг #методы_рефакторинга
Проблема
У вас есть публичное поле
class Person {
name: string;
}
Решение
Сделайте поле приватным и создайте для него методы доступа
class Person {
private _name: string;
get name() {
return this._name;
}
setName(arg: string): void {
this._name = arg;
}
}
Причины рефакторинга
Одним из столпов объектного программирования является Инкапсуляция или возможность сокрытия данных объекта. Иначе все данные объектов были бы публичными, и другие объекты могли бы получать и модифицировать данные вашего объекта без его ведома. При этом отделяются данные от поведений, связанных с этими данными, ухудшается модульность частей программы и усложняется её поддержка
Достоинства
- Если данные и поведения какого-то компонента тесно связанны между собой и находятся в одном месте в коде, вам гораздо проще поддерживать и развивать этот компонент
- Кроме того, вы можете производить какие-то сложные операции, связанные с доступом к полям объекта
Когда нельзя применить
Встречаются случаи, когда инкапсуляция полей нежелательна из соображений, связанных с повышением производительности. Эти случаи очень редки, но иногда этот момент бывает очень важным.
Например, у вас есть графический редактор, в котором есть объекты, имеющие координаты x и y. Эти поля вряд ли будут меняться в будущем. К тому же, в программе участвует очень много различных объектов, в которых присутствуют эти поля. Поэтому обращение напрямую к полям координат экономит значительную часть процессорного времени, которое иначе затрачивалось бы на вызовы методов доступа.
Как иллюстрация этого исключения, существует класс Point в Java, все поля которого являются публичными.
Порядок рефакторинга
- Создайте геттер и сеттер для поля
- Найдите все обращения к полю. Замените получение значения из поля геттером, а установку новых значений в поле — сеттером
- После того как все обращения к полям заменены, сделайте поле приватным
