Раз уж зашел разговор про voters, какой правильный кейс их

использования?
Вот допустим есть command/handler . Задача - редактирование только своей записи. Это выходит надо запись получить в контроллере и пропихнуть ее в voters, прежде чем запускать handler? Не перегружается ли контроллер такими действиями?
Т.е. мы начала получаем запись по ID из репо, а потом ID запускаем в хэндлер и снова тянем из репо. Т.е. делаем это 2 раза. Это хорошо что у нас там IdentityMap, и нет лишних запросов.

25 ответов

20 просмотров

а ты в курсе что можно сразу entity закинуть в isGranted/denyAccessblabla и не мучаться

Павел-Г. Автор вопроса
Konstantin dmz9
а ты в курсе что можно сразу entity закинуть в isG...

Так я об этои и говорю, что Entity надо достать, и делать это в контроллере.

Павел Г.
Так я об этои и говорю, что Entity надо достать, и...

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

Павел-Г. Автор вопроса
Konstantin dmz9
ну э да, достал в контроллере, чекнул права через ...

Вопрос в том, почему мы в контроллере достаем объект бизнес логики, а то и не один, так как ACL(layer) может быть сложным. Почему в контроллере вообще используется репо. В общем вопрос в хорошей практике, а не в документации.

Павел Г.
Вопрос в том, почему мы в контроллере достаем объе...

А в чем проблема в контроллере репу использовать?

Павел Г.
Вопрос в том, почему мы в контроллере достаем объе...

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

Павел-Г. Автор вопроса
Павел-Г. Автор вопроса
Павел-Г. Автор вопроса
Aleksandr Khristenko
Почему?

Потому что мы в слое который отвечает за request/responce лезем в базу данных и управляем сущностями

Павел Г.
Потому что мы в слое который отвечает за request/r...

Мы не лезет в базу. Мы обращаемся к репозиторию.

Павел Г.
Потому что мы в слое который отвечает за request/r...

та я видел и реализации типа Controller:method ( $id, Business $business ) $business->doSomething($id); $business->finishWork(); return $business->result(); что можно понять из этого кода вообще? )

Павел-Г. Автор вопроса
Konstantin dmz9
та я видел и реализации типа Controller:method ( $...

идеальная реализация контроллера

Павел-Г. Автор вопроса
Aleksandr Khristenko
Мы не лезет в базу. Мы обращаемся к репозиторию.

мы к репо обычно лезем из бизнеса, а тут из контроллера.

Павел Г.
мы к репо обычно лезем из бизнеса, а тут из контро...

а можно бизнес логика не будет знать о существовании репозитория? спасибо

Павел-Г. Автор вопроса
Павел Г.
мы к репо обычно лезем из бизнеса, а тут из контро...

Если тебе нужно в действии контроллера вытащить данные и прокинуть их в твин ты для этого тоже отдельную сущность будешь делать или в контроллере сделаешь?

Павел Г.
Можно, если ей передавать готовые данные

ну так мы это и делаем не? Controller:method ( $id, Business $business, Repository $repo ) $business->doSomething($repo->find($id)); $business->finishWork(); return $business->result();

Павел-Г. Автор вопроса
Aleksandr Khristenko
Если тебе нужно в действии контроллера вытащить да...

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

Павел-Г. Автор вопроса
Konstantin dmz9
ну так мы это и делаем не? Controller:method ( $id...

Я не совсем вас понимаю. Тут вы тащите репо в бизнес.

Павел Г.
Ну тут мысль верная, в чтении можно сразу в базу. ...

А если перед тем как отобразить нам надо проверить что можно отобразить?

Павел Г.
Можно сделать queryHandler

Зачем? Я думал все это разделение ради принципа единой ответственности и повторного использования. И использования репозиторию в контроллере мне кажется не противоречит.

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

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

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