Страницы

Поиск по вопросам

понедельник, 11 марта 2019 г.

Как правильно “облегчить” класс?

На текущий момент есть один большой класс, который имеет довольно много методов и свойств.
Однако, в разных местах программы никогда не требуется сразу весь реализованный функционал, и возникает желание "облегчить" класс.
Я полагаю, можно вынести основной функционал в общий класс, а за тем вынести в классы-наследники более узконаправленный. Например:
Однако, если в виде исключения потребуется одновременно функционал обоих классов-наследников что делать - непонятно. (Каждый раз править набор общих методов мне кажется неоправданно трудоёмко)
Может использовать трейты для расширения функционала? Однако что-то меня смущает в трейтах.
Может есть какие-то бест практис решения?


Ответ

Для решения данной задачи хорошо подходит механизм композиции. Навскидку его можно достичь 2 путями:
1) Использовать трейты (traits), для php >= 5.4. http://php.net/manual/ru/language.oop5.traits.php
2) Использовать реализацию с помощью паттерна "Декоратор", при помощи которого мы можем к базовой функциональности подключать необходимый нам функционал. Тут есть отличное описание схемы работы данного паттерна:
https://refactoring.guru/ru/design-patterns/decorator

Комментариев нет:

Отправить комментарий