-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Кейс "Как организовать поведение схожее с Инстаграмом" #16
Comments
Как вариант, сделать background сервис, который будет обрабатывать очередь запросов.
При выдергивании из бд лайки получаем объединением таблиц (в случае, если это отдельная таблица) или просто выборкой (если это одна таблица) |
Мне нравится паттерн "Source Of Truth" (источник правды). Вводится некий новый слой (объект) который изолирует от UI логику асинхронной обработки изменений в объекте модели. В каждый момент времени этот объект отдает текущее актуальное состояние этого объекта. Сразу после того как лайк поставили - он сохраняет информацию об этой заявке на изменение в специальную область модели (бд например). С этого момента он отдает свойства объекта такими, как будто операция уже выполнена до тех пор пока не получит результат запроса (что может теоретически произойти скоро или не скоро в зависимости от бизнес-логики и того допустимо ли ставить лайк без наличия сети). После получения ответа состояние объекта актуализируется и заявка на изменение помечается как выполненная. За всем этим следит этот Source Of Truth. Также может быть очень важно реализовать уведомление подписчиков о том, что источник правды закончил обработку запроса и возможно сама правда изменилась и ее нужно как-то отобразить пользователю. В случае Clean архитектуры мне кажется что источник правды должен быть частью репозитория. Репозиторий такого объекта становится более умным и берет на себя функции источника правды. При этом все остальные слои остаются не тронутыми. (Не считая изменений, которые могут быть а могут не быть для уведомления пользователя о результатах (чаще неудачных) запроса) |
Можно сделать сервис, который будет отвечать за очередь на прикладном уровне OSI и мониторить её в определённое количество секунд.
Задача сервиса: Точка старта — Точка остановки — Но вообще, вроде как, подобные кейсы (c лайками и подобными событиями) принято гонять на транспортном уровне OSI — с помощью |
@adolgiy предложил пожалуй самое лучшее решение этого кейса из всех, что есть в сети) |
Как организовать поведение схожее с Инстаграмом. То есть ты ставишь лайк, и на UI сразу же все отображается. При этом параллельно идет запрос, прочая логика. И в конце концов запрос может провалиться.
iOS кидали в сторону CQRS
http://blog.softmemes.com/2016/11/12/using-cqrs-with-event-sourcing/
https://martinfowler.com/bliki/CQRS.html
Сейчас принимаются идеи, концепции и люди, кто хочет пилить, дабы в дальнейшем не делать двойную работу.
The text was updated successfully, but these errors were encountered: