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

245
08 марта 2018, 11:52

На текущий момент есть один большой класс, который имеет довольно много методов и свойств.

Однако, в разных местах программы никогда не требуется сразу весь реализованный функционал, и возникает желание "облегчить" класс.

Я полагаю, можно вынести основной функционал в общий класс, а за тем вынести в классы-наследники более узконаправленный. Например:

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

Может использовать трейты для расширения функционала? Однако что-то меня смущает в трейтах.

Может есть какие-то бест практис решения?

Answer 1

Для решения данной задачи хорошо подходит механизм композиции. Навскидку его можно достичь 2 путями:

1) Использовать трейты (traits), для php >= 5.4. http://php.net/manual/ru/language.oop5.traits.php

2) Использовать реализацию с помощью паттерна "Декоратор", при помощи которого мы можем к базовой функциональности подключать необходимый нам функционал. Тут есть отличное описание схемы работы данного паттерна:

https://refactoring.guru/ru/design-patterns/decorator

READ ALSO
Хранение даты в MySQL (не в time)

Хранение даты в MySQL (не в time)

Проект на PHP даты в нем храню time()Однако в ходе разработки столкнулся с вопросом, что в некоторых случаях пользователь может ввести в БД MySQL дату...

258
Передать _POST из View в model

Передать _POST из View в model

Здравствуйте, помошникиОпять нуждаюсь в вашей помощи

248
изменение данных php

изменение данных php

имеется вот такой код, все работает, но не так как хотелось быкогда изменять какие то данных, то обязательно надо изменить тариф"'tarifid'" иначе...

234