У меня есть веб-приложение, построенное на дизайне MVC.
У меня есть база данных, которая содержит большое количество объектов (тем форума), которые я не могу загрузить в память сразу. Теперь я хочу отобразить (частично) эту коллекцию с различными действующими фильтрами (вроде того, что делает stackoverflow с вопросами, отсортированными по дате, голосам, тегам и т. Д.).
Где я могу реализовать логику фильтрации? Мне кажется, что это должно входить в модельную часть приложения, поскольку только модели взаимодействуют с базой данных (в моей реализации). Если я сделаю фильтрацию частью представления, то представление должно получить доступ к базе данных напрямую, чтобы получить список отфильтрованных объектов, верно? Я хотел бы избежать этого, потому что это предоставляет представление базы данных для представления. Но в то же время отображение различных представлений одних и тех же данных должно быть реализовано в представлении приложения на уровне , поскольку они просто - разные представления одних и тех же данных.
Так, как мне решить это? Должен ли я создать дополнительную модель, скажем, FilteredThreadsList, и запомнить ли она используемый фильтр, а затем использовать FilteredView для отображения списка потоков, которые выплевывает FilteredThreadsList?
Или мне нужно создать ThreadQueryier, который позволяет представлениям запрашивать базу данных для определенных объектов потока, чтобы я мог иметь логику фильтрации в представлении, не раскрывая бэкэнд базы данных?