автообновление таблицы
От: vaa  
Дата: 25.10.22 03:08
Оценка:
есть Server Blazor App. Используется MudBlazor DataGrid.
Записи имеют сложную структуру(несколько таблиц) со статусами по различным аспектам(на грид подаются массивом).
Данные хранятся в базе(ef core).
Сейчас грид обновляется только после действий пользователя(добавил, удалил, обновил).
Какой подход лучше использовать, чтобы обновить грид вручную при изменении вне действий пользователя.
Данные меняются во многих местах.
Тупо дергать автоматически каждые X секунд или делать подписку по id к какой-то шине, которая уже будет сама дергать базу?
Как узнать что что-то изменилось: 1. в каждом методе где изменяется запись возбуждать событие (reactive?) 2. дергать базу и считать дельту?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: автообновление таблицы
От: RushDevion Россия  
Дата: 25.10.22 06:33
Оценка: 6 (1)
vaa>Какой подход лучше использовать, чтобы обновить грид вручную при изменении вне действий пользователя.

А это точно нужно? Данные так часто меняются? Что страшного произойдет, если пользователь какое-то время будет видеть неактуальные данные?

vaa>Данные меняются во многих местах.

vaa>Тупо дергать автоматически каждые X секунд или делать подписку по id к какой-то шине, которая уже будет сама дергать базу?

На клиенте — websocket (если REST/http) или streaming (если GRPC), подписываемся на событие. Событие для простоты одно, e.g. serverStateChanged.
Клиент получает событие и перезагружает всю гриду целиком.
На сервере — какой-то хук в процесс сохранения сущностей для публикации события.
Тут от архитектуры и фреймворков зависит.
Например, в mediator это есть из коробки (INotification)
В ef/ef-core можно вклиниться в SaveChanges и даже достать конкретные сущности/поля через change tracker.
В event sourcing фреймворках обычно тоже есть какой-то extension point для сохранения.
Если ничего такого нет — ну втыкнуть публикацию в репозитории при сохранении/удалении.
Отредактировано 25.10.2022 8:51 RushDevion . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.