«Фильтры» для запросов к базе данных
Поскольку для хранения информации в новом приложении потребуется база данных, я решил использовать подход, аналогичный тому, что применялся в Wasted — фильтры для запросов.
Суть заключается в том, чтобы объект, отвечающий за отправку запросов к базе данных, не «заморачивался» на том, какие именно данные нужно вернуть. Вместо этого он будет полагаться на вспомогательный объект Filter.
Как видите, метод обращения к базе данных состоит буквально из одной строчки кода, где мы обращаемся за результатом, передавая в качестве аргументов данные из фильтра: имя таблицы, нужные столбцы, условия выборки и так далее.
Класс FilterSwears является абстрактным и имеет только один реализованный метод, который возвращает имя таблицы. Это уместно, так как по моим расчетам приложению будет достаточно одной таблицы.
Классы-потомки в свою очередь могут реализовать необходимые методы так, как того потребует их назначение. Например, следующий фильтр переопределяет метод getSelection() таким образом, чтобы получить выборку из событий, которые скоро начнутся или закончатся.
В результате, можно легко создавать новые фильтры, которые будут получать из базы данных нужные результаты в зависимости от потребностей. И все благодаря полиморфизму.
В качестве недостатка такого подхода можно назвать повышенное потребление оперативной памяти, так как каждое обращение к базе потребует создание нового объекта фильтра. В данном случае обращений к базе будет не очень много, и они будут происходить только по запросу пользователя, поэтому сборщик мусора будет вполне успевать уничтожать «использованные» фильтры.
Однако если потребуется реализовать более интенсивную работу с БД, лучше будет исключить создание новых объектов. Это можно сделать с помощью Enum (специальный класс, имеющий ограниченное количество заранее предопределенных экземпляров).
Другое решение — сделать все классы фильтров абстрактными, а их методы — static (статичные или статические?). Это возможно, ведь мы не планируем изменять какие-либо значения внутри фильтров.
Пост получился скорее про Java, чем про Android, но может быть кому-то будет интересно, а кто-то поделится конструктивной критикой в адрес такого решения.
PS: Сегодня, превозмогая боль и страдания, в Wasted появилась возможность отключить рекламу.
Манги Ридер благодарности пост
Сможете найти на картинке цифру среди букв?
Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi