Я пишу приложение для Android, которое может искать по всей базе данных. В частности, я использую Room (абстракцию над базой данных SQLite в приложении) и пытаюсь придерживаться официального Руководство по архитектуре приложений, который использует шаблон DAO и Repository. Все данные оффлайн.
У меня есть несколько моделей, например Song, Album, Artist, … и все они доступны для поиска. Это моя попытка написать MetadataSearcher — класс, который выполняет полнотекстовый поиск по всей базе данных:
Реализованы все модели с возможностью поиска
SearchableMetadatainterface SearchableMetadata { fun getID(): Long // ID of the searched object in its database fun getLabel(): String // Some text represent the searched content, e.g. artist name }Все DAO с возможностью поиска реализуют
SearchableMetadataDaointerface SearchableMetadataDao<T : SearchableMetadata> { fun search(name: String): List<T> }MetadataSearcher:class MetadataSearcher { fun search(name: String): List<SearchableMetadata> }
MetadataSearcher имеет доступ ко всем DAO (имеется ссылка на RoomDatabase, который является объектом низкого уровня, который может делать все), и вызывает их всех для поиска в БД. Никакого причудливого ранжирования совпадений, никакого доменного кода, он просто суммирует результаты.
Мне кажется, что этот класс слишком много делает, это в основном хранилище SearchableMetadata. Можно ли что-нибудь улучшить?
![Класс для полнотекстового поиска по всей базе данных [closed] TheFAQ.ru](https://thefaq.ru/wp-content/uploads/2023/01/logo-250.png)