Лекции на специальности спо базовой подготовки


Перемещение функций между объектами



Скачать 98,31 Kb.
страница28/45
Дата03.09.2023
Размер98,31 Kb.
#223870
ТипЛекции
1   ...   24   25   26   27   28   29   30   31   ...   45
Связанные:
Лекции по дисциплине Разработка программных модулей (6)

Перемещение функций между объектами
Если вы разместили функциональность по классам не самым удачным образом — это еще не повод отчаиваться.
Рефакторинги этой группы показывают как безопасно перемещать функциональность из одних классов в другие, создавать новые классы, а также скрывать детали реализации из публичного доступа.

  • Перемещение метода

Проблема: Метод используется в другом классе больше, чем в собственном.
Решение: Создайте новый метод в классе, который использует его больше других, и перенесите туда код из старого метода. Код оригинального метода превратите в обращение к новому методу в другом классе либо уберите его вообще.

  • Перемещение поля

Проблема: Поле используется в другом классе больше, чем в собственном.
Решение: Создайте поле в новом классе и перенаправьте к нему всех пользователей старого поля.

  • Извлечение класса

Проблема: Один класс работает за двоих.
Решение: Создайте новый класс, переместите в него поля и методы, отвечающие за определённую функциональность.

  • Встраивание класса

Проблема: Класс почти ничего не делает, ни за что не отвечает, и никакой ответственности для этого класса не планируется.
Решение: Переместите все фичи из описанного класса в другой.

  • Сокрытие делегирования

Проблема: Клиент получает объект B из поля или метода объекта А. Затем клиент вызывает какой-то метод объекта B.
Решение: Создайте новый метод в классе А, который бы делегировал вызов объекту B. Таким образом, клиент перестанет знать о классе В и зависеть от него.

  • Удаление посредника

Проблема: Класс имеет слишком много методов, которые просто делегируют работу другим объектам.
Решение: Удалите эти методы и заставьте клиента вызывать конечные методы напрямую.

  • Введение внешнего метода

Проблема: Служебный класс не содержит метода, который вам нужен, при этом у вас нет возможности добавить метод в этот класс.
Решение: Добавьте метод в клиентский класс и передавайте в него объект служебного класса в качестве аргумента.

  • Введение локального расширения

Проблема: В служебном классе отсутствуют некоторые методы, которые вам нужны. При этом добавить их в этот класс вы не можете.
Решение: Создайте новый класс, который бы содержал эти методы, и сделайте его наследником служебного класса, либо его обёрткой.



Скачать 98,31 Kb.

Поделитесь с Вашими друзьями:
1   ...   24   25   26   27   28   29   30   31   ...   45




База данных защищена авторским правом ©psihdocs.ru 2023
обратиться к администрации

    Главная страница