Вурдалак
Продвинутый новичок
Каждая команда атомарна. Если у тебя в принципе нет никаких событий, привязанных на отдельно взятое действие типа rename, relocate, etc., то можно, в принципе, сделать это одной командой. Как я выше сказал, тут могут быть команды ChangeProfile { userId, name, location, ...} и BanUser { userId }. Ты уверен, что эти действия действительно так обязательно выполнять атомарно, только потому что это одна форма? Ты не встречал, например, форм, которые сразу применяют действие, там даже нет кнопки «Сохранить» (в ВК есть такое, по-моему)? Это чисто вопрос UI. Ну, в конце концов, можно обе команды запустить в одной транзакции БД, это будет специальный хак для UI. Но фактически с этим проблем нет: да, мы может обновить профиль, но зафейлим команду бана юзера. Что тут плохого?а как на счет атомарности?
Можешь привести пример о чём ты говоришь?ну дело не в пользователе, это же и заказы, деньги?
Ещё один момент, заставляющий задуматься: твоя форма отправляет большой скоп данных, вполне вероятно, что юзер изменится, пока ты редактируешь его. Тут мог бы помочь какой-нибудь optimistic lock, но повышается риск того, что даже на неконфликтные с точки зрения бизнес-логики действия форма будет сообщать о конфликтах (ты меняешь юзеру имя, а рядом кто-то его забанил).
А если ты не используешь optimistic lock, то у тебя вообще будет код, который будет показывать, что ты, например, разбанил юзера (появляется соответствующее событие, сработают методы компенсации за бан и прочее), когда ты ничего такого не делал: просто в момент загрузки формы у тебя была снята галка, а соседний модератор успел забанить этого пользователя.
Поэтому лучше, когда клиент в явном виде сообщает дифф изменений: набор команд, которые решил предпринять юзер. Явное лучше неявного. Если только мы не занимаемся обфускацией.
Последнее редактирование: