И к слову дело не в экономии строк, а в

DX.
Я хочу писать код, который делает задачу. Мне нужна сущность, я явно описал как его получить в аннотации и получил, зафигом мне тут зависимость от репозитория, который ещё тоже писать надо?
Если у меня конкретный класс обёрнут в крутые штуки, которые позволяют мне сущности получать аннотациями, логично что оно и транзакции сверху контролирует.

Итого я сосредоточен на задачах бизнеса, а не занимаюсь обмазыванием кода инфраструктурными флашами и явными транзакциями

10 ответов

28 просмотров

вы в этом случае просто переносите код в аннотации, ничего более аналогично можно сваять $this->argumentResolver->getAnyEntityById(...) это опять же явное и неявное вам нравится чувство крутости и того что "это" понимаете вы и еще пару человек а мне нравится код код простой как двери, даже в ущерб крутости

Константин-Грачев Автор вопроса
Dmitry
вы в этом случае просто переносите код в аннотации...

Дело в уменьшении зависимостей. В моём примере у меня конструктора даже нет. Такой код в разы понятнее и легче тестируется. Крутость это не инженерный термин

Константин Грачев
Дело в уменьшении зависимостей. В моём примере у м...

ваш код все равно зависим, просто неявно, от того же резолвера, который в свою очередь зависит от чего-то там еще как вы будете тестировать метод контроллера ? чисто теоретически вам нужно будет создавать резолвер, к нему закидывать другие зависимости и тп и чем это будет отличаться от того что прямо в метод контроллера прокинуть нужный репозиторий ?

Константин-Грачев Автор вопроса
Dmitry
ваш код все равно зависим, просто неявно, от того ...

Тесты так не пишутся. Если надо протестировать всю цепочку, так тестируй всю цепочку от реквеста до респонса. Пытаться воссоздать последовательность мидлварей в тестах это бред. Либо пишешь юнит тест на 1 хендлер без зависимостей, либо как в моём примере выше не пишешь, ибо он на столько простой, что стат анализа достаточно

Константин Грачев
Тесты так не пишутся. Если надо протестировать всю...

а причем тут цепочка ? я вам предлагаю теоретически протестировать метод с неявным получением сущности через аннотации ну а если "я такое не тестирую, оно сильно простое" - ваше право, у меня другое мнение

Dmitry
вы в этом случае просто переносите код в аннотации...

А можно точнее? Вот есть soft code а есть hard code. Если ты стремишься к последниму, то твой код не гибкий и сложноподдерживаемый. И наоборот soft code силшком сильно прегружает логику абстракциями, мелко дробя логику на уровни. Аннотации это крутая вещь. Просто нужно помнить что аннотация в основном это замена конфигурации. Какая разница где её писать, в yaml или в самом коде. Я вот любитель ЯВНОГО кода. И эту явность я люблю проявлять в бизнес логике. Что там происходит в фреймворке - вообще плевать, главное чтоб бизнес логика была понятная и ЯВНАЯ. Да и подумай подругому. У тебя rest api. Каждый эндпоинт это ресурс. Вот пользак отсылает тебе запрос DELETE:users/123 - вот зачем тебе по 100 раз вручную брать репозитории, получать пользака по id (сам id ты должен получить из реквеста). Абстрагируйся - просто сразу получи пользака в эндпоинт и вызови у него $user->delete() а дальше если не было доменных исключений система сама сделает flush. Изи!

Dmitry
ваш код все равно зависим, просто неявно, от того ...

а в чем проблема тестировать код с аттрибутами? метод класса ожидает какую-то энтитю - создаём инстанс класса, даём ему эту энтитю и всё. аттрибуты в таком случае проигнорируются

Mikhail Kobychev
А можно точнее? Вот есть soft code а есть hard cod...

ну раз вам так удобнее, я ж не против. я приверженец другого подхода

Mikhail Kobychev
А можно точнее? Вот есть soft code а есть hard cod...

на каком этапе запроса должен происходить flush? как быть с ситуациями создания сущности, где нам нужно отдать инкремент сущности пользователю, либо передать его на сторонний веб-сервис?

Egor
на каком этапе запроса должен происходить flush? ...

при создании сущности ты можешь пользоваться flush вручную если нужно вернуть id. или пользуйся готовыми крудами где ты просто настраиваешь энити а дальше всё работает

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

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

Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: 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
Карта сайта