@Alk90
php, mysql, jquery, css, html, api

Как избавиться от повторяющегося кода?

Всем привет! У меня есть класс Attachments и еще несколько классов, которые его наследуют: ImageAttachment и VideoAttachment.
Эти классы используются всеми модулями на сайте: "новости", "посты", "комментарии" и т.д.
Когда я получаю из БД список вложений для какого-то из этих модулей, то мне нужно перебрать массив полученных данных, определить тип вложение и добавить его в список вложений любого из вышеописанных модулей....
Для этого, в каждом классе объектов (новости, посты, комментарии) есть метод addAttachment, который по сути везде одинаковый... Как мне избавиться от его повторения везде?
У меня была мысль создать некий абстрактный класс и все классы (новости, посты, комментарии) наследовать от него... Тогда у меня был бы один метод addAttachment, только в этом абстрактном родительском классе... Но мне кажется глуппо наследовать клас Comments от класса AbstractAttachments.
Надеюсь понятно объяснил... Ведь код приводить бессмысленно - он очень большой
  • Вопрос задан
  • 260 просмотров
Решения вопроса 2
lxsmkv
@lxsmkv
Test automation engineer
В пхп вроде есть mixins, называются traits php.net/manual/en/language.oop5.traits.php
Ответ написан
Комментировать
@galliard
Но мне кажется глуппо наследовать клас Comments от класса AbstractAttachments.


Все верно, наследование не является инструментом переиспользования кода, и применять его для этого не стоит.

Если метод тривиальный, то вполне можно и продублировать, ничего страшного в этом нет.

Если классов с этим методом много и сам метол постоянно меняется и перерабатывается - можно использовать трейты, в противном случае я бы этого делать не стал, ибо они сильно усложнят поддержку кода в будущем.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alek_tost
Можно использовать трейты и ввести общий интерфейс для этих модулей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы