Я ищу несколько советов. Я недавно закончил проект, в котором унаследовал какой-то ужасный код. Я запустил приложение, но можно с уверенностью сказать, что есть ряд проблем с производительностью и дизайном, особенно с расширенными функциями поиска. Теперь меня попросили сделать очень похожий проект, но гораздо большего масштаба. У меня есть возможность создать гораздо лучшую модель предметной области с нуля и создать гораздо лучшее приложение в целом. Вопрос в том, как лучше всего реализовать расширенный поиск?
Страница расширенного поиска отображает форму с двумя обязательными текстовыми полями, 4 необязательными раскрывающимися списками и двумя отдельными областями с несколькими необязательными флажками для дальнейшей фильтрации результатов.
Текущее решение использует два обязательных поля для возврата списка объектов, которые я затем фильтрую и удаляю на основе любых необязательных значений формы. Затем я выбрасываю отфильтрованный список в кеш и прикрепляю идентификатор сеанса пользователя. Затем на каждой странице результатов у меня есть Html.Helper, который отображает ссылки на страницы, использующие подход Take (). Skip () в списке, полученном из кэша для отображения 10 результатов.
Проблема, с которой я столкнулся, заключается в том, что список может быть довольно громоздким. Я пытаюсь сохранить обращения к базе данных для каждой новой страницы результатов, помещая их в кэш, но я не уверен, что это лучший способ для этого. Должен ли я просто поместить все значения формы в строку запроса монстра и продолжать делать вызовы базы данных из запросов GET? Должен ли я сохранять критерии поиска пользователей в базе данных или сеансе и использовать их для каждой новой страницы результатов? Правильно ли я использую кеш для хранения такой мощной коллекции?
Я задал вопрос, похожий на этот здесь: Пейджинговые результаты поиска с asp.net MVC , которые привели меня к использованию кэша. Теперь, когда у меня есть чистый лист, я хотел бы следовать передовым методам и делать это с самого начала. Любые предложения будут великолепны.