Как Не Дать Пользователю Заснуть При Загрузке Большого Набора Данных

«Одно из двух, — прошептал он, — либо пациент жив, либо он мертв».

Если он жив, то он останется жив или не останется в живых.

Если он мертв, его можно воскресить или нельзя воскресить.

А.

Н.

Толстой.

«Золотой ключик, или Приключения Буратино»

Как не дать пользователю заснуть при загрузке большого набора данных



Введение

Недавно в организации, где я работаю, возникла идея переписать корпоративную систему, которая работает уже более 20 лет и за это время несколько устарела.

Если коротко, то это информационная система в сфере морских грузоперевозок и обслуживания судов в порту.

в настоящее время я работаю над НИОКР и я хочу поделиться с вами некоторыми проблемами, с которыми может столкнуться разработчик такой системы и как я планирую их решать.

В настоящее время я планирую сервер приложений ASP.NET Core для .

NET 6. База данных останется старой, так как это позволит постепенно переходить на новую систему по мере добавления функциональности.

Ожидается, что основное клиентское программное обеспечение будет основано на WPF под .

NET 6. Кроме того, возможны небольшие узкопрофильные клиенты на веб-страницах и мобильных устройствах.



Проблема

Пользователю лень фильтровать запрашиваемые данные, а их довольно много.

Заставлять пользователя что-то фильтровать – это бесчеловечно и попахивает произволом.

В нынешней системе такой пользователь сидит грустно, ругает разработчиков, давит на техподдержку.

В текущей системе клиент обращается непосредственно к базе данных через БД? , с этим ничего не поделаешь.

В новой системе клиент ничего не знает о базе данных; сервер по его запросу отправляет JSON по HTTP. Если делать это в лоб, то мало что изменится: сервер по запросу клиента будет собирать коллекцию объектов для отправки, загружать их из базы или что-то еще.

Потом он отправит всю эту махину в ответном HTTP-пакете, предварительно сериализовав ее в JSON, где это все за один присест будет десериализовано в клиентские объекты, которые наконец предстанут перед глазами безнадежного пользователя.



Идея решения

Да ладно, сервер по запросу начнёт загружать в свою коллекцию, как и раньше, но отправит клиенту не всё, а сколько можно загрузить до истечения таймаута, или какое-то фиксированное количество объектов, или как результате суперпозиции этих условий.

В этом случае мы сообщим клиенту в специальной шапке, все ли уже сделано или нет. А если нет — передать специальный идентификатор, который клиент должен предоставить при запросе следующей порции.

Таким образом, пользователь быстро увидит результат и, возможно, даже сможет его использовать.

Допустим, у нас есть следующий класс:

   

public enum PartialLoaderState { New, Partial, Full .

} public class PartialLoader<T> where T: class {

Теги: #C++ #.

NET #ASP #ASP #Пользовательский интерфейс #загрузка данных #дружественный интерфейс

Вместе с данным постом часто просматривают: