Что не так с трейтами?

ndnjzx5ncb1udjgcj4vxckgeq54.jpeg

Кажется, стоит просто сказать «трейты» — и начнется холивар. Мы уже случайно начали один пару недель назад. А затем решили разобраться. Что это в большей степени? Способ снизить дублирования кода. Быстрый способ внедрить функциональность. Дефолтная реализация интерфейса. Или древнее зло?

Рассмотрим с примерами — в эту среду вечером на ютубе. А ниже можно ознакомиться с позициями участников трансляции.
Как все будет. Мы устроим что-то близкое к дебатам: серия раундов, оппоненты, модератор. И голосование за приглянувшуюся вам позицию.

Валентин Удальцов (автор канала «Пых») выступит ярым противником трейтов. Роман Пронский (PHP-Дайджест) — ведущим. Ну, а остальные ребята будут защищать доброе имя трейтов.


Кирилл Несмеянов, разработчик в SpiralScout, член программного комитета PHP Russia


 — Что не так с трейтами?

— Да всё с ними «так»: это инструмент — применяй правильно. Забивать гвозди микроскопом — много ума не надо. Проблема в тех, кто пытается запихнуть их туда, куда не следует, а потом такие: «Да ну это всё, пойду лучше во фронтенд».

 — Почему тебе интересно поговорить об этом?

— Потому что не все понимают, для какого круга задач были придуманы трейты. Почему-то их обычно считают средством физической нарезки классов. Пора это прекращать!

 — Сможет ли 2-часовой онлайн заставить тебя поменять свою позицию?

— Нет.


Сергей Жук, тимлид в Skyeng, ведущий подкаста «Между Скобок»


 — Что не так с трейтами?

— Как и любой инструмент, трейт должен быть в арсенале разработчика. Но стоит использовать его правильно: например, для шаринга каких-то методов-хелперов между несвязанными классами в библиотеках, где мы хотим дать пользователям возможность расширять функционал без наследования или DI.

Конечно трейты могут стать «leaky». И чтобы не выстрелить себе в ногу, я для себя выделил три правила:

  • Для любого трейта должен быть соответствующий интерфейс.
  • Трейт должен быть полностью самодостаточным: всё, что он использует, должно быть объявлено внутри него самого.
  • Трейты должны быть как можно меньше. В идеале один метод — один трейт.


 — Почему тебе интересно поговорить об этом?

— Многие разработчики категорически против этой возможности PHP. Было бы интересно поспорить с ними. Пока для меня это выглядит как: «Я попробовал git rebase → испортил себе репозиторий → git rebase зло».

 — Сможет ли 2-часовой онлайн заставить тебя поменять свою позицию?

— Да.


Иван Лещев, разработчик в BotHelp.io


 — Что не так с трейтами?

— Все ок, просто кто-то не умеет их правильно готовить.

 — Почему тебе интересно поговорить об этом?

— Интересно посмотреть на примеры хорошего и плохого дизайна.

 — Сможет ли 2-часовой онлайн заставить тебя поменять свою позицию?

— Скорее нет, чем да.


Александр Дубовской, технический директор в Radon, активный участник Drupal-сообщества


 — Что не так с трейтами?

— Всё так. Просто это молоток, которым вполне можно и по пальцу ударить.

Холивар тянется как минимум со статьи Энтони Феррара 2011 года Are traits the new eval. Но тогда было мало красивых примеров, за которыми сейчас можно легко сходить в Symfony-компоненты. Тот же LockableTrait жутко удобен и понятен зачем и почему)

 — Почему тебе интересно поговорить об этом?

— Любые архитектурные споры — это интересно. Как минимум, услышишь свежие точки зрения и узнаешь, что еще почитать.

 — Сможет ли 2-часовой онлайн заставить тебя поменять свою позицию?

— Нет.

p.s.

Никита Попов: Трейты не люблю особо. Я участвую в разработке с PHP 5.5, а их добавили в 5.4. Если бы я тогда был, их бы точно не добавили.


p.p.s. Если есть отличная история, как трейты всех спасли или испортили, пожалуйста, расскажите ее на стриме 23 декабря. И в любом случае — подключайтесь.

© Habrahabr.ru