Как использовать комнату без нарушения шаблона MVP? - PullRequest
0 голосов
/ 21 апреля 2020

Я использую базу данных Room в своем приложении и пытаюсь следовать шаблону MVP, поэтому я хочу использовать презентатор для вызова функций, которые выполняют операции с базой данных. android Контекст приложения необходим для получения ссылки на базу данных, поэтому в View (Activity) я вызываю:

AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "AppDatabase").build();

AppDatabase - абстрактный класс, расширяющий RoomDatabase , имеет кучу android импорта и содержит DAO интерфейс. Этот дизайн взят из официального руководства Android.

Теперь, если бы я передал и использовал этот AppDatabase объект (или интерфейс DAO), он сломал бы шаблон MVP, так как это тот, который фактически содержит методы работы с базой данных) в презентере? DAO содержит SQL запросов и имеет набор android импортов с такими методами, как dao.insert(item).

edit:

AppDatabase class и ItemDao интерфейс:

@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
    public abstract ItemDao itemDao();
}

@Dao
public interface ItemDao {
    @Query("SELECT * FROM item")
    List<Item> getAll();

    @Query("SELECT * FROM item WHERE date BETWEEN :from AND :to")
    List<Item> findItemsBetweenDates(LocalDate from, LocalDate to);

    @Insert
    void insert(Item... items);
}

1 Ответ

0 голосов
/ 21 апреля 2020

Нет, вы не будете нарушать структуру MVP, пока зависимости перемещаются от представления (действия или фрагментов) к докладчику. Хорошей идеей будет представить ваш DAO, а не базу данных приложения.

Я бы также предложил добавить файл класса AppDatabase к вашему сообщению, чтобы сделать его более явным.

EDIT

Вместо предоставления DAO создайте интерфейс репозитория, который абстрагирует DAO и саму реализацию репозитория от вызывающего элемента (который может быть PRESENTER, CONTROLLER или VIEWMODEL, что вы предпочитаете). Это сделает хранилище зависимым только от API DAO publi c, а не от его реализации, сделает DAO зависимым только от сущностей, которые он использует, и сделает сущности полностью свободным элементом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...