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

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

25 ответов

15 просмотров

а ты в курсе что можно сразу 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

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

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

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

Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
На чём в основном щас пишут мини апы? Vuejs?
Goot evening Not everyone
6
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
9
🙋 Ребята, всем привет. Поправил задачу: Нужно каждому новому сообщению (1 раз по каждому юзеру) в чате прибавлять снизу кнопку с предложением подписаться на канал. Как добавит...
Alexander
1
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
Просто по очереди выпиливаешь на ручной маппинг? По методу за раз
Andrii Kurdiumov
7
всем привет помогите пожалуйста используя CDN (GCP) у игроков из вьетнама загружается конфиг (размер 999 bytes) загружается 5 и более минут н а других CDN сервисах такой пробл...
Andrew Krw.
1
Приветствую. А не подскажете какие ограничения есть на использования api метода setMyName ? Несколько раз сменил имя бота и получил бан на 2 месяца на смену имени.
Slick Slack
8
Карта сайта