Класс для полнотекстового поиска по всей базе данных [closed]

Я пишу приложение для Android, которое может искать по всей базе данных. В частности, я использую Room (абстракцию над базой данных SQLite в приложении) и пытаюсь придерживаться официального Руководство по архитектуре приложений, который использует шаблон DAO и Repository. Все данные оффлайн.

У меня есть несколько моделей, например Song, Album, Artist, … и все они доступны для поиска. Это моя попытка написать MetadataSearcher — класс, который выполняет полнотекстовый поиск по всей базе данных:

  • Реализованы все модели с возможностью поиска SearchableMetadata

    interface 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 с возможностью поиска реализуют SearchableMetadataDao

    interface SearchableMetadataDao<T : SearchableMetadata> {
        fun search(name: String): List<T>
    }
    
  • MetadataSearcher:

    class MetadataSearcher {
        fun search(name: String): List<SearchableMetadata>
    }
    

MetadataSearcher имеет доступ ко всем DAO (имеется ссылка на RoomDatabase, который является объектом низкого уровня, который может делать все), и вызывает их всех для поиска в БД. Никакого причудливого ранжирования совпадений, никакого доменного кода, он просто суммирует результаты.

Мне кажется, что этот класс слишком много делает, это в основном хранилище SearchableMetadata. Можно ли что-нибудь улучшить?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *