Я не могу сказать, что это вопрос, но скорее просьба о мнении, и я уверен, что многие другие могли бы выиграть от разъяснения этого вопроса.
Вот мой практический пример:
У меня есть абстрактный класс с именем DataExchangeService и множество подклассов, расширяющих этот класс (это базовый класс CONTROLLER в моей MVC Framework).Модули администрирования, которые обрабатывают определение данных (пользователи, типы, разделы и т. Д.), Все они имеют методы добавления, редактирования, удаления, составления списка со сходством в большинстве случаев на 100%.Я знаю это, потому что я копирую их, используя только поиск и замену.Теперь дело не в том, что все мои подклассы DateExchangeService обрабатывают определение данных, поэтому есть достаточно случаев, когда мне не нужны методы CRUD.
Множественное наследование определило бы эти методы CRUD и их поведение в другом классе ирасширить оба этих класса там, где это необходимо, но я действительно считаю, что это сложно, и я не использую его (+ PHP не имеет такой функциональности).Итак, что было бы лучшим опытом?
Вот подходы, которые приходили мне в голову:
CASE A
Определить класс CRUDHandler, который имеет всеэти методы параметризованы.
Создайте свойство типа CRUDHandler, где оно необходимо, а также реализуйте интерфейс CRUD, который заставит меня использовать эти методы.
В тела реализованных методов я добавляю что-то вроде этого:
public function edit($params) {
$this->params = $params;
$this->CRUDHandler->handle("edit", $this);
}
(В PHP это можно сделать с помощью магического метода __call()
.)
CASE B
Определить класс CRUDHandler как расширение базового DataExchangeService.
При определении определенного типа DataExchangeService (например, UsersExchangeService)вместо расширения DataExchangeService вы расширяете CRUDHandler, таким образом вы получаете все, что хотите, когда это необходимо.
Итак, есть ли другие мнения по поводу этого подхода с применением множественного наследования?
Спасибо