Kirill
ебашь в роутах весь код и вуаля
Kirill
но тут надо разделять, у тебя хелло ворлд на пару методов или монолит сто в одном)
Kirill
в целом это не очень хорошо работает, имхо, всё же всякого шаред кода дофига
Kirill
ну там сервисы логина, юзер токен, аутх, прочее говно
Kirill
а эта шляпа в целом требует изоляции
Сергей
Сергей
Сергей
Можно и хендлер внутри хендлера вызывать , главное держать в голове, что это вынужденная мера, которой не стоит злоупотреблять .
Вадим
Vlad
Юра
Что логичнее возвращать если не найдена энтити: 404 или 200 и null респонс
Вадим
Вадим
и какая энтити не найдена
Вадим
если GET /entity/{id} то 404 конечно
Юра
если GET /entity/{id} то 404 конечно
Что мне не нравится в этом подходе
1) Не нравится что 404 в случае роут не найден и тот же 404 в случае энтити не найдена
2) На фронте обычно сложнее хендлить такие ответы чем например вернуть 200 и { "result": null }
Юра
Но по феншую да 404 нужно
Михаил
Михаил
не нравится рест, попробуйте РПЦ
Михаил
ну и то, что если вы обращаетесь в несуществующий ресурс (я имею ввиду когда сервер не знает что такое /a/b/c/123 а не то что /a/b/c/123 не существует в бд) сервер отдаёт 404 - это не совесм правильно
Михаил
я бы отдавал 400 ответ. Если метода нет то мы отдаём 405. Не понятно почему с 404 такая корреляция
Юра
Но вообще да если роута нет то по идее это не 404
Юра
Потому что The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.
Юра
С чего бы ему появится в будущем
Вадим
Юра
Мне не нравится что это какой-то особый случай обработки ответа
Юра
У тебя не приходит просто null а кидается исключение типо 404
Юра
Ну ок представь что у тебя функция вместо того чтобы вернуть null если не найден результат кидает исключение
Вадим
Михаил
Ну плюс корреляции это не хорошо
Михаил
неверная настройка клиента и не существующий ресурс это разные ошибки
Юра
Вот контроллер, достал из репозитория и вернул результат, ну ок что там нет ничего, результат 200 null. Но приходится проверять наьнул и кидать исключение непонятно почему и как хак ещё и в монолог добавлять что не логировать 404. Не зря как раз этот параметр в монологе как раз и намекает что архитектурно это какой-то костыль
Михаил
Вот я приду в магазин продуктов и буду спрашивать «а у вас автомобиль есть?», они скажут «нет».
Я буду каждый день приходить и спрашивать есть ли, а мне будут отвечать что его нет.
Но если бы они ответили что "мы не продаём машины вообще" это было бы семантически правильно. Ну и я бы перестал долбиться к ним в дверь
Михаил
Вадим
вы вдвоём сговорились но на что-то плохое
Михаил
А ещё мы жёсткие токсики, уууу
Михаил
POZOR
Вадим
Вадим
это то что вы просили
Вадим
если это не то как надо - вопросы к контроллеру
Kirill
Kirill
а их шеймить можно так же, как любой шарпист может шеймить джаваскриптизёров, например
Kirill
ну их адель с тёмычем сдерживают)
Kirill
главные токсики чата
Вадим
За Аделем не замечал, а вот Артём это пиздец
Kirill
так это ж самые доблестные защитники чата от толп хомячков
Kirill
которые даже в гугл не могут влезть
Nikolay
Что не говори, а если писал на симфони долгое время, то на ларавел ни за какие деньги не захочешь
Вадим
Юра
Мы тут недавно обсуждали где флашить доктину. Но по-моему мы упустили момент что можно явно начать транзакцию
Юра
Тогда можно флашить спокойно в разных юзкейсах главное чтобы комит был в одном месте
Юра
Потому что меня все-таки бесит флаш в контроллере, так как например если тебе нужно получить id записи, то ты не можешь это сделать так просто без флаша и какой-то получается кривой сервис который вроде сделал работу но не до конца
Юра
Только не надо сейчас про то что айди должен генерироваться на клиенте, мне это не нужно
Kirill
Kirill
interface Domain\UnitOfWorkInterface
{
/**
* @template T of mixed
* @param callable():T
* @return T
*/
public function persistable(callable $cb): mixed;
}
// Domain\Service
$uow->persistable(function(): mixed {
// всякие вызовы других доменных сервисов
});
Kirill
типа такого
Михаил
В итоге у тебя будет вложенная транзакция так как при флаше доктрина открывает свою
Kirill
ну там не обязательно транзакция
Kirill
зависит от реализации uow, которая через di внедряется
Kirill
да и как бы тут доктрины никакой нет в примере)
Михаил
А ещё доброе утро долгоживущие транзакции когда у тебя долгий http запрос идёт внутри неё
Ну и нагружать бд транзакцией ради «ну так не красиво» кмон.
Kirill
опять же, причём тут вообще транзакции?)
Михаил
Kirill
это-то да, но в моём случае это просто единица работы, а как оно будет реализовано уже не важно
Kirill
главное что все изменения внутри персистятся/флушатся
Михаил