Приходишь такой в дружелюбную команду и начинается. А чо вы

php-cs-fixer не используете? 100 замечаний в ревью и все про синтаксис.
А нафига вы формы в апи используете? А нафига контроллеры состоят из одной строчки $handler->handle($request)?
Через несколько таких нафига о дружелюбии можно забыть )

36 ответов

32 просмотра

никто не пишет в объявление о поиске кандидатов: "В королевство жаб и гадюк требуется свежее мясо (с)"

мне кажется, это можно на собесе выяснить отчасти

Константин-Грачев Автор вопроса
SarcasmIO
никто не пишет в объявление о поиске кандидатов: "...

Лучше бы ничего не писали, а то нальют воды как в диплом)

Константин-Грачев Автор вопроса
Игорь Шумиченко
мне кажется, это можно на собесе выяснить отчасти

Можно, но идеальный код всё равно не найдёшь. Да и смысла нет искать, тут вопрос не в коде, а в том что люди привыкли делать фигню, а отучить сложно. Особенно если лида толкового нет и в команде демократия, где голосуют за то как привыкли)

Константин Грачев
Можно, но идеальный код всё равно не найдёшь. Да и...

проблема с идеальным кодом в том что даже если ты его найдешь - подожди недельку и посмотри - ты ошибся и можно было лучше. don't make it greate, let them upgrade

Константин-Грачев Автор вопроса
Sergey P
проблема с идеальным кодом в том что даже если ты ...

Вообще в целом ещё вопрос что хуже, плохой код или не эффективные процессы

𝔏𝔦𝔩𝔦𝔱𝔥
а какой он, этот идиальный код?

не, ну тут должно быть всё в разумных пределах

Константин Грачев
Вообще в целом ещё вопрос что хуже, плохой код или...

код проще фиксить, особенно когда процессы эффективные

Константин-Грачев Автор вопроса
Sergey P
код проще фиксить, особенно когда процессы эффекти...

Ага, а если все привыкли перед релизом ждать недельных регрессов, такие фиксить пару лет)

Игорь Шумиченко
хотя бы поэтому

совершенству нет предела ))

годно) как показывает практика к этим выводам команда или определенные люди должны еще дойти

А действительно, нафига тебе контроллер из одной строчки? Он прросто лишний, сразу роут на хендлер направляй и ок.

Константин-Грачев Автор вопроса
Андрей Ява
А действительно, нафига тебе контроллер из одной ...

Кто-то где-то когда-то услышал, что логики в контроллерах быть не должно. Поэтому всё что с приставкой *Controller теперь return $this->handler->handle($request) Контроллер есть, а логики нет. Миссия выполнена

Андрей Ява
А действительно, нафига тебе контроллер из одной ...

Точки входа проще искать с наличием контроллеров

Константин Грачев
Кто-то где-то когда-то услышал, что логики в контр...

скорей всего речь идет об отделении бизнес логики от фреймворка. что б можно было сменить фреймворк, не меняя код логики. Только в этом случае неизменный реквест туда передавать не надо. Об этом рассказывал Роберт Мартин. Он предложил использовать Interactors или Use Cases.

Константин-Грачев Автор вопроса
karser karser
screenshot скорей всего речь идет об отделении бизнес логики ...

Интересно каким образом тут отделение от фреймворка идёт если хендлер принимает на вход объект Symfony\HttpFoundation\Request, а внутри себя вызывает $this->symfonyFormFactory->createForm()->handle($request)

Константин-Грачев Автор вопроса
Дмитрий Ткаченко
Зачем фреймворк менять?

Кто-то где-то когда-то сказал что framework agnostic code это круто

Константин Грачев
Интересно каким образом тут отделение от фреймворк...

Фреймворк это то, что вызывает вас. а то, что вызываете вы - уже библиотеки. Т.е реквест это часть фреймворка. А симфони формы - это зависимость хендлера.

Константин Грачев
Кто-то где-то когда-то сказал что framework agnost...

Ну я так стараюсь писать, но отнюдь не для смены фреймворка)))

Константин Грачев
Кто-то где-то когда-то сказал что framework agnost...

Despite being called "engineers," most decision are pure cargo-cult with no backing analysis, data, or numbers

Константин-Грачев Автор вопроса
Sergey Zolotov
Despite being called "engineers," most decision ar...

На самом деле в текущем треде непонятен только один вопрос, почему меня убеждают в неверности подхода если изначально поинт был в том что я с теми же аргументами обычно прихожу в "дружный коллектив", и "дружным" на этом он быть перестаёт)

Дмитрий Ткаченко
Зачем фреймворк менять?

Бывает такое, что фреймворк бросают, например angularjs. если у вас логика отделена от контроллеров, то перейти на другой будет легче. Также, логику, вынесенную в хендлеры, которые не зависят от реквеста, можно запускать и в CLI command, и в queue worker. Еще в тестах это удобнее. Логику, отделенную от фреймворка можно протестировать сотней тест кейсов, которые выполнятся за 200мс. Если логика находится в контроллере, то 1 тест кейс может выполняться несколько секунд, каждый раз поднимая ядро фреймворка. Тестировать логику, а не фреймворк. Хотя логику + фреймворк тестировать тоже надо, но это функциональные тесты, они проверяют только критический путь.

karser karser
Бывает такое, что фреймворк бросают, например angu...

согласен, валидные поинты. но я б не был так категоричен. щас домой вернусь и можем подискутировать

Ели в приложение есть следующие кейсы: один и тот же бизнес сценарий может быть запущен в результате - http запроса от АПИ - в результате http запроса в результате отправки формы(формат данных отличается от того что в АПИ) - есть несколько разных версий АПИ, которые отличаются по формату, но дергают одну и ту же бизнес логику - в результате обработки сообщения из очереди - в результате soap запроса - и т.д. то выделять бизнес логику в сервис (usecase, интерактор) - так или иначе придется. Фактически в приложение появляются слои - слой обработки http /soap / grpc и т.д. - слой в котором инкапсулированы бизнес сценарии - слой в котором инкапсулировано знание о сущностях ну или нарезка на слои может следовать какой либо другой логике. От слоев есть практическая польза когда они имеют явно выраженные границы: - т.е. верхний слой знает о слое нижнем (но не знает о следующих слоях), - а нижележащий слой не знает ничего о верхних слоях (по аналогии - сетевой карте должно быть без разницы, отправляет она udp или tcp пакеты, и уж тем более без разницы кто шлет эти данные - браузер, или телеграм) такая изоляция требует появления специальных контейнеров данных которые нужны для передачи информации между слоями- т.е. появляется Data Transfer Object - DTO. Если dto не вводить , а фигачить через все слои тупо один объект (например http request), то фактически это про протекание слоев. Т.е. все эти слои они решают вполне конкретную задачу - сделать код устойчивым к изменениям: - пришел клиент дал много денег что бы склепали апи на каком то некрофильском бинарном протоколе -пожалйста -> слой бизнес логики не трогаем, делается отдельный контроллер в нем логика по тому как смапить данные из протокола на dto для сервиса, и как из dto ответа сервиса - создать ответ в формате протокола - решили поменять реализацию бизнес сценария - ну например раньше в рамках бизнес сценария состояние сущностей хранилось в бд, а потом пришли микросервисы - и вот реализации бизнес сценария поменялось - в нем теперь не с сущностями работа идет, а дергуются другие апи. - тогда можно не переписывать все контроллеры/консольные команды/обработчики сообщений , а поменять реализацию интерфейса класса в котором инкапсулирвоана логика бизнес сценария Другое дело что решаемые задачи характерны далеко не для всех приложений. Контроллер в одну строчку - имхо, это следствие не понимания какая именно задача решалась при вынесение бизнес логики в отельный сервис (отсюда и кривая реализация в виде пробрасывания http request внутрь сервиса)

да, так и есть. Хорошо, если четко понятно, когда проект это однодневный прототип, а когда большое приложение

karser karser
Бывает такое, что фреймворк бросают, например angu...

пример с ангуляром не очень удачный. чтобы без проблем с того же ангуляра на реакт прыгнуть это прям дофига работы. то что можно отделить это слой апи, так он в идеале должен вообще генерироваться. ну и нам том же реакте ты код в отрыве от фреймворка не сможешь писать ну вот никак. 90% будет завязано на то как работают хуки и тд на счет логики которая используется в cli, консумерах и других вариантах типа grpc, или даже банально в других модулях - однозначно да, лучше отделять. а если это простой модуль состоящий из крудов, то какой смысл усложнять? пусть в контроллерах и остается тесты это отдельная тема. там совсем "it depends"

Похожие вопросы

Обсуждают сегодня

Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта