#рефакторинг #методы_рефакторинга ![[Pasted image 20241119080144.png]] ### **Проблема** У вас есть публичное поле ```typescript class Person { name: string; } ``` ### **Решение** Сделайте поле приватным и создайте для него методы доступа ```typescript class Person { private _name: string; get name() { return this._name; } setName(arg: string): void { this._name = arg; } } ``` ### Причины **рефакторинга** Одним из столпов объектного программирования является [[Инкапсуляция]] или возможность сокрытия данных объекта. Иначе все данные объектов были бы публичными, и другие объекты могли бы получать и модифицировать данные вашего объекта без его ведома. При этом отделяются данные от поведений, связанных с этими данными, ухудшается модульность частей программы и усложняется её поддержка ### **Достоинства** - Если данные и поведения какого-то компонента тесно связанны между собой и находятся в одном месте в коде, вам гораздо проще поддерживать и развивать этот компонент - Кроме того, вы можете производить какие-то сложные операции, связанные с доступом к полям объекта ### **Порядок рефакторинга** 1. Создайте геттер и сеттер для поля 2. Найдите все обращения к полю. Замените получение значения из поля геттером, а установку новых значений в поле — сеттером 3. После того как все обращения к полям заменены, сделайте поле приватным ### **Борется с запахом** - [[Классы данных]] ### **Ссылки** - https://refactoring.guru/ru/encapsulate-field - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]