在MVVM体系结构中从多个数据库表访问数据的最佳实践是什么?
我正在通过创建一个Android应用程序来动手学习MVVM架构。我了解不同的组件是如何配合和协同工作的。 我正在考虑通过将多个表添加到appDatabase并访问它们以形成一个请求(可用于从存储库层调用Web服务)来增加此应用程序的复杂性。
我的问题:您对最佳做法有何看法? (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;
}
...
}
使用相应的ViewModel:
public class ItemViewModel extends AndroidViewModel {
private LiveData<List<Item>> allItems;
...
}
public class AddressViewModel extends AndroidViewModel {
private LiveData<List<Address>> allAddresses;
...
}
我的MainActivity.java观察allItems LiveData:
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中获取相应的destinationAddress,以使用该destinationAddress发起Web服务请求。
什么是好的建筑设计? (a)我应该在MainActivity中观察List并将所有信息传递到存储库中,还是 (b)让存储库处理address_table中的数据吗?