Пагинация на сайте

173
24 октября 2018, 21:40

задание сделать библиотеку(реальная с книгами и газетами) с использованием трехслойной архитектурой, где UI - asp net mvc. Первым заданием делал бизнем логику и дал(ado.net). Там я сделал методы для поиска, получения всех, сортировки по полю без пагинации. Потом дали тз на mvc. и там добавили пагинацию. И все методы что я делал без пагинации мне надо переделать так чтобы они могли принимать номер страницы и возвращать определенное количество объектов. Я стажер, и только обучаюсь к проду. Я понимаю, что это можно просто переделать, ко всем методам добавить по параметру(в логике, потом в DAL, потом в хранимые процедуры в БД). Это пока маленькая система, но ведь когда я буду на проде там будет системы большие. Ведь там я не буду переписывать все методы. В связи с этим вопрос. Как можно переделать так, чтобы не переписывать все методы , а просто как-нибудь расширить функционал методов. И я не прошу с кодом помочь, мне бы идею подкинуть, чтоб неполучилось *овно-кода Надеюсь не запутал. Заранее спасибо

Answer 1

Если правильно делать логику соблюдая все паттерны и трёхуровневую архитектуру, то переделывать если и надо будет то только метод в сервисе. И лучше списки в слое бизнес-логике писать с расчётом на пагинацию: опцинальные параметры take и skip. Например, метод для получения списка пользователей:

public async Task<List<UserResponse>> GetAllUsersAsync(int? skip = null, int? take = null)
{
    if (take == null)
    {
        List<User> users = await _context.Users.OrderBy(x => x.FullNameNormalized)
            .Skip(skip.GetValueOrDefault())
            .ToListAsync();
        return users.ToUserResponseList();
    }
    else
    {
        List<User> users = await _context.Users.OrderBy(x => x.FullNameNormalized)
            .Skip(skip.GetValueOrDefault())
            .Take(take.Value)
            .ToListAsync();
        return users.ToUserResponseList();
    }
}

Я могу вызвать этот метод с null параметрами и получить весь список, а могу указать смещение и сколько записей брать. Если понадобится сделать пагинацию, то мне не придётся ничего менять ни в слое доступа к данным, ни в слое бизнес-логики.

READ ALSO
MySQL SELECT JOIN 3 таблицы, LIMIT 1

MySQL SELECT JOIN 3 таблицы, LIMIT 1

Всем добраВозникли трудности, работая с 3-мя таблицами

148
Маска ввода textbox для телефона WPF

Маска ввода textbox для телефона WPF

У меня есть textbox в который из бд выводится номер телефона:

319
Поменять цвет кнопки для Html хелпера

Поменять цвет кнопки для Html хелпера

На вьюхе есть Html хелпер который генерирует следующую разметку:

164
Почему 1436/1005 = 1?

Почему 1436/1005 = 1?

Вот скрин куска код в режиме отладки:

152