Что не так с трейтами?
Кажется, стоит просто сказать «трейты» — и начнется холивар. Мы уже случайно начали один пару недель назад. А затем решили разобраться. Что это в большей степени? Способ снизить дублирования кода. Быстрый способ внедрить функциональность. Дефолтная реализация интерфейса. Или древнее зло?
Рассмотрим с примерами — в эту среду вечером на ютубе. А ниже можно ознакомиться с позициями участников трансляции.
Как все будет. Мы устроим что-то близкое к дебатам: серия раундов, оппоненты, модератор. И голосование за приглянувшуюся вам позицию.
Валентин Удальцов (автор канала «Пых») выступит ярым противником трейтов. Роман Пронский (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 декабря. И в любом случае — подключайтесь.