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

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

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

10 ответов

12 просмотров

вы в этом случае просто переносите код в аннотации, ничего более аналогично можно сваять $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. или пользуйся готовыми крудами где ты просто настраиваешь энити а дальше всё работает

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

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

Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Вы когда из вики.... копировали, не обратили внимание на года(ы)? 😉 ==== если до 1917 года в Москве было около 15 000 легковых извозчиков, то к 1920 году их осталось 5 000, а ...
Igor Mitin
4
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
t.me/<username> и tg://user?id=<id> отваливаются по понятным причинам
Denis 🐍|👑 | darling! 🥰
7
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
На счёт замены разрабов нейронами: Вряд-ли заказчик сможет нормально пояснить нейросети, чё он хочет. Они то человеку нормально пояснить не могут, не то что нейросети. Так что...
Alex Kom
1
Что я могу сказать? Погуглите получше - чтобы узнать: 1. Что будет стоить содержание машины 2. Что будет стоить содержании лошади. P.S. Моя мысль о том, повторюсь еще раз,...
Igor Mitin
1
Слушайте, а при создании навигации на Tailor рили нельзя определять активный пункт навигации, как в Static Pages?
Pavel Lautsevich
11
Как Яндекс помог извозчику из 1914? ))) Более того, Яндекс условный уничтожил сверхдоходы уксусов в свое время Мне как пассажиру - каеф. Оодскульным ленивым и наглым таксиста...
Sergej R
1
Карта сайта