
Sergey
07.10.2017
10:31:13
и этот самый createCache

Ilshat
07.10.2017
10:31:28
открыли список групп-> перешли на 5ую страницу->открыли список юзеров у первой группы-> у юзера есть список групп куда он привязан-> нажали добавить новую группу-> появляется окошко с спиком всех групп и пагинация стоит на первой

Sergey
07.10.2017
10:32:27
и кто стэйт ресетнул?

Google

Sergey
07.10.2017
10:32:56
ты ж там что-то про redux говорил

Ilshat
07.10.2017
10:32:57
лучше попробуй нарисовать

Sergey
07.10.2017
10:33:04
написать*?

Ilshat
07.10.2017
10:33:07
у меня нету щас редакса
нет нарисовать)

Sergey
07.10.2017
10:33:43
до редаксов я стэйт в сервисах хранил

Ilshat
07.10.2017
10:33:47
увидешь что фигня получется если сервис один и тотже, пагинация сбросится на первом окошке

Sergey
07.10.2017
10:34:14
и там должна быть разная пагинация? или одинаковая?

Ilshat
07.10.2017
10:34:26
разная

Sergey
07.10.2017
10:34:28
или во втором списке нет пагинации?

Ilshat
07.10.2017
10:34:37
везде есть
и таких может быть 10 вложенных

Google

Sergey
07.10.2017
10:35:09
ну ок, не будем пока ux темы обсуждать
по факту у тебя сейчас реализовано - стэйтфул компоненты и стэйтлесс сервисы, так?

Ilshat
07.10.2017
10:35:39
не шарю
я код пишу книг не читаю

Sergey
07.10.2017
10:35:49
компонент хранит че там у него по пагинации?

Ilshat
07.10.2017
10:36:11
стайт
я на реакте писал

Sergey
07.10.2017
10:37:02
ну это все меняет

Ilshat
07.10.2017
10:37:42
лан мне надо код писать, харе болтать, спс за советы, пригодятся

Егор
07.10.2017
11:31:58
Допустим есть User, который может подписаться на автора. Если рассматривать User как сущность с поведением, то в голову приходит такой код:
class User
{
subscribeTo(Author author)
{
this.subscriptions.add(new Subscription(this, author))
}
}Но требования поменялись, теперь если User не подтверждён, то он не может иметь больше трёх подписок. Где делать проверку - в сущности или в сервисе? Если в сервисе - то нужно ли дублировать эту проверку в сущности?

Sergey
07.10.2017
11:32:37
в юзере хватает?
> он не может иметь больше трёх подписок.
тот на кого подписываются?
кому нужна информация о подписках?
как она используется?
у кого ограничения


Егор
07.10.2017
11:40:02
В юзере хватает данных. Неподтверждённый пользователь может подписаться только на трёх авторов. То есть достаточно
if (!this.isConfirmed && this.subscriptions.count() > 2) {
сообщить пользователю о том, что подписаться он не может.
}Если помещать проверку в сущность, то что должен возвращать метод subscribe? Постоянно выбрасывать исключения мне не очень нравится.

Sergey
07.10.2017
11:41:46
можешь сделать метод canSubscribe() какой

Google

Sergey
07.10.2017
11:42:26
но исключение чуть что кинуть надо
(или ивент, но это другая история)

Егор
07.10.2017
11:43:52
Переформулирую - мне не очень нравится ловить исключения. Думаю это не ислючительная ситуация. Пользователь может попытаться подписаться, а в ответ должен получить сообщение о том, что ему нужно подтвердить аккаунт.

andretshurotshka?❄️кде
07.10.2017
11:44:29
Either)

Sergey
07.10.2017
11:45:02
ну то есть ты можешь статус операции если хочешь возвращать и в случае если нельзя чуваку добавлять - вернуть что все плохо
но это такое...
тут на клиентский код надо смотреть. Мне проще - у меня апишки. Если что-то идет не так - кидаю исключение и клиент сам уже рисует скрин нужный

Егор
07.10.2017
11:49:26
Хорошо, спасибо за ответ. Фраза "где у тебя хватает для этой проверки данных" заставила хорошо задуматься.

Sergey
07.10.2017
11:51:06
почитай про "информационный эксперт"

Max
08.10.2017
16:22:53
Господа, день добрый. Вопрос - нормально ли выбрасывать эксепшены в бизнес-логике или лучше\проще возвращать что-то типа err_msg? Допустим, юзер хочет добавить какие-то данные, контроллер эти данные передает в хандлер-сервис, там они проверку не проходят. Понятно что юзеру надо об этом сказать (т.е. flash message), но на уровень контроллера бросать эксепшн или просто возвращать строку err_msg (с учетом того что это надо еще и залогировать)?

Ilshat
08.10.2017
16:27:07
обрабочик ошибок сделай общий, чтобы стэк трйс не выплевывать всем подрят и отдавай в таком виде какой запросили, если json то отдавай json: {error:'Error text'}, html: <html>trollo с версткой сайта</html> а логируй уже со стеком
ну если ты бэк пилишь)

Max
08.10.2017
16:31:33
Перефразирую вопрос - когда в случае с бизнес-логикой выплевывать эксепшн, когда можно просто вернуть строку error_msg?

Ilshat
08.10.2017
16:33:46
Ну я против эксепшенов нативных, ошибки бизнес логики 400, и жсон
Нативный тока 500)
Послушаем что другие скажут
А то как это будет выводиться уже пусть фронт решает

Max
08.10.2017
16:41:36

Ilshat
08.10.2017
16:42:34
Ну 400 как раз для этого же

Google

Ilshat
08.10.2017
16:42:48
404 это нет данных

Max
08.10.2017
16:44:20
Ну 400 как раз для этого же
Ок, тогда как пример - юзер пытается зарегистрироваться в сервисе, но при этом уже имеет аккаунт со своим текущим ip aдресом. Бизнес-логика требует, чтобы на каждый аккаунт был уникальный ip. Мне же не выбрасывать 400 страницу в этом случае?
В моем понимании, его редиректит на главную, и выводится сообщение где-нибудь, что, мол, "по правилам 1 аккаунт = 1 ip адресс".

Ilshat
08.10.2017
16:48:02
403 Forbidden[19] — сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу.
Вот это наверное

Max
08.10.2017
16:53:08

Sergey
08.10.2017
16:53:54

Андрэ
08.10.2017
16:55:11
Ну и исключения сильно лучше тем, что легко разрулить - для веба один ответ, для API другой

Max
08.10.2017
16:55:53

Sergey
08.10.2017
16:55:54

Max
08.10.2017
16:56:24
Как изначально валидировать ip то?

Sergey
08.10.2017
16:56:29
вот бизнес лейер не должен ничего спрашиваьт/делать для ui

Андрэ
08.10.2017
16:56:36

f4rt~
08.10.2017
16:56:43

Sergey
08.10.2017
16:57:11
filter_var ip ?
ему бизнес ограничение надо проверить. Для этого должен быть сервис который можно заюзать или спросить есть ли такие сущности

f4rt~
08.10.2017
16:57:18

Sergey
08.10.2017
16:57:23
а формат проверить это да, легко

Max
08.10.2017
16:57:30
Контроллер идет в сервис-класс с бизнес-лейером, оттуда возвращается exception, который ловится в контроллере, я правильно понял?

Sergey
08.10.2017
16:57:49

Google

Sergey
08.10.2017
16:58:07
можешь просто сделать штуку которая говорит "есть такой" или "нет такого"
все сильно от задачи зависит

Андрэ
08.10.2017
16:58:20
Мне кажется БЛ должен вернуть инфо об ошибке

Sergey
08.10.2017
16:58:36
ты должен понять что пошло не так, но этого может не хватать для ui layer

Max
08.10.2017
16:59:00
зачем?
Понятно, он получает от функции в бизнес-логике true\false, и далее уже как-то показывает это в ui. Я получил ответ на свой вопрос, спасибо.

Андрэ
08.10.2017
16:59:08
Может быть, но все завист от архитектуры и задачи, сам так же считаешь ведь