Всем привет! У меня есть класс Attachments и еще несколько классов, которые его наследуют: ImageAttachment и VideoAttachment.
Эти классы используются всеми модулями на сайте: "новости", "посты", "комментарии" и т.д.
Когда я получаю из БД список вложений для какого-то из этих модулей, то мне нужно перебрать массив полученных данных, определить тип вложение и добавить его в список вложений любого из вышеописанных модулей....
Для этого, в каждом классе объектов (новости, посты, комментарии) есть метод addAttachment, который по сути везде одинаковый... Как мне избавиться от его повторения везде?
У меня была мысль создать некий абстрактный класс и все классы (новости, посты, комментарии) наследовать от него... Тогда у меня был бы один метод addAttachment, только в этом абстрактном родительском классе... Но мне кажется глуппо наследовать клас Comments от класса AbstractAttachments.
Надеюсь понятно объяснил... Ведь код приводить бессмысленно - он очень большой
Но мне кажется глуппо наследовать клас Comments от класса AbstractAttachments.
Все верно, наследование не является инструментом переиспользования кода, и применять его для этого не стоит.
Если метод тривиальный, то вполне можно и продублировать, ничего страшного в этом нет.
Если классов с этим методом много и сам метол постоянно меняется и перерабатывается - можно использовать трейты, в противном случае я бы этого делать не стал, ибо они сильно усложнят поддержку кода в будущем.
Да, действительно с трейтами получилось... Но насчет поддержки сложно сказать, например сейчас, я уверен, что метод работает одинаково для всех моих классов.
А если нужно будет изменить метод для нескольких классов (модулей), то трейты поддерживают наследование и переопределение методов, так что думаю не возникнет бед...
Спасибо и вас за помощь!