Каков наилучший способ доступа к данным из нескольких таблиц базы данных в архитектуре MVVM?
Я использую практический подход к изучению архитектуры MVVM путем создания приложения для Android.Я понимаю, как различные компоненты подходят и работают вместе.Я подумываю о том, чтобы добавить сложности в это приложение, добавив несколько таблиц в базу данных appDatabase и получая к ним доступ для формирования запроса, который можно использовать для вызова веб-службы из слоя Repository.
Мой вопрос: какова вашамнение о лучшей практике?(a) Должен ли я наблюдать за всеми соответствующими таблицами базы данных как LiveData в действии и создавать там свой запрос и отправлять его в репозиторий через ViewModel? или (b) Должен ли я скрывать все это из действия и разрешать обработку хранилищавсе манипуляции с данными из различных таблиц?
У меня есть 2 таблицы: item_table и address_table
@Entity(tableName = "item_table")
public class Item {
@PrimaryKey(autoGenerate = true)
private int id;
private String itemName;
private String itemType;
private String itemGroup;
...
}
@Entity(tableName = "address_table")
public class Address {
@PrimaryKey(autoGenerate = true)
private int id;
private String itemGroup;
private String destinationAddress;
...
}
У меня есть соответствующие DAO
@Dao
public interface ItemDao{
@Query("SELECT * FROM item_table")
LiveData<List<Item>> getAllItems();
}
@Dao
public interface AddressDao{
@Query("SELECT * FROM address_table")
LiveData<List<Address>> getAllAddresses();
}
И соответствующие репозитории:
public class ItemRepository{
private ItemDao;
private LiveData<List<Item>> allItems;
public LiveData<List<Item>> getAllItems(){
return allItems;
}
...
}
public class AddressRepository{
private AddressDao;
private LiveData<List<Address>> allAddresses;
public LiveData<List<Address>> getAllAddresses(){
return allAddresses;
}
...
}
С соответствующими ViewModels:
public class ItemViewModel extends AndroidViewModel {
private LiveData<List<Item>> allItems;
...
}
public class AddressViewModel extends AndroidViewModel {
private LiveData<List<Address>> allAddresses;
...
}
My MainActivity.java наблюдает за LiveIata allItems:
private ItemViewModel itemViewModel;
itemViewModel = ViewModelProviders.of(this).get(ItemViewModel.class);
itemViewModel.getAllQuickAccessDevices().observe(this, new
Observer<List<Item>>() {
@Override
public void onChanged(@Nullable List<Device> devices) {
//do stuff
...
}
}
На основе itemGroup соответствующего элемента, я хочуизвлечь соответствующий адрес назначения из address_table, чтобы инициировать запрос веб-службы, используя этот адрес назначения.
Каким будет хороший архитектурный дизайн?(а) Должен ли я наблюдать Список в MainActivity и передавать всю информацию в хранилище, или (б) позволить хранилищу манипулировать данными из address_table?