Android,我是否使用ViewModel执行插入或更新?
我知道体系结构组件中的ViewModel用于存储和管理数据,因此在配置更改期间不会丢失数据 例如,我的活动与LiveData或使用存储数据无关。我还应该浏览ViewModel吗?或者直接实例化Repo类并调用插入方法?我希望这是有意义的 我使用ViewModel的一个示例Android,我是否使用ViewModel执行插入或更新?,android,mvvm,architecture,Android,Mvvm,Architecture,我知道体系结构组件中的ViewModel用于存储和管理数据,因此在配置更改期间不会丢失数据 例如,我的活动与LiveData或使用存储数据无关。我还应该浏览ViewModel吗?或者直接实例化Repo类并调用插入方法?我希望这是有意义的 我使用ViewModel的一个示例 public class MainViewModel extends AndroidViewModel { private DataRepo dataRepo; private LiveData<List
public class MainViewModel extends AndroidViewModel {
private DataRepo dataRepo;
private LiveData<List<Group>> groupList;
private LiveData<List<Bill>> billList;
public MainViewModel(Application application) {
super(application);
dataRepo = new DataRepo(this.getApplication));
groupList = dataRepo.getGroup();
billList = dataRepo.getBill();
}
public LiveData<List<Group>> getGroupList() {
return groupList:
}
public LiveData<List<Bill>> getBillList() {
return billList:
}
public void insertGroupAndMember(Group group) {
dataRepo.insertGroupAndMember(group);
}
public void insertBills(List<Bill> bills) {
dataRepo.insertBills(bills);
}
public List<Member> getMemberList(Group group) {
return dataRepo.getMembers(group);
}
}
public类MainViewModel扩展了AndroidViewModel{
私人DataRepo DataRepo;
私有LiveData组列表;
私有LiveData账单列表;
公共主视图模型(应用程序){
超级(应用);
dataRepo=newdatarepo(this.getApplication));
groupList=dataRepo.getGroup();
billList=dataRepo.getBill();
}
公共LiveData getGroupList(){
返回组列表:
}
公共LiveData getBillList(){
退货清单:
}
public void insertGroupAndMember(组){
dataRepo.insertGroupAndMember(组);
}
公共作废票据(清单票据){
dataRepo.insertBills(票据);
}
公共列表getMemberList(组){
返回dataRepo.getMembers(组);
}
}
我建议您考虑以下几点:
- MVVM作为一种模式起源于2000年,例如,关于这个概念,2005年约翰·戈斯曼在他的博客中宣布了这个模式。是的,它解决了android模式实现中的旋转问题,但是这个问题没有它也可以解决。MVVM实际上需要将表示状态与最终用户看到的视图分离开来。正如维基所说-
- 实例化视图范围中的域对象及其随后被视图使用会导致视图和域对象之间的紧密耦合,这是任何系统的一个坏特性。此外,这也是更改视图内部结构的另一个原因,因为若域对象的构造逻辑发生更改,视图也必须更改
如果<代码> VIEWSMODS对你来说是Extrut(如我所见,在这个特定的情况下,它的好处与你无关,因为UI不是很复杂,它的状态是轻量级的),考虑使用一个不太重的抽象,比如MVP。因此,您将能够在应用程序中保留视图和模型之间的抽象(没有不必要的耦合),并且您不必支持不从中受益的代码。
我认为您希望使用ViewModel来尽可能保持UI控制器的干净。您的viewmodel应该调用repo来执行简单的CRUD操作。 见以下文件: 需要UI控制器 还负责从数据库或网络加载数据 将膨胀添加到类中。将过多的责任分配给UI 控制器可以生成一个类,该类尝试处理所有 应用程序本身的工作,而不是将工作委托给其他类。 以这种方式向UI控制器分配过多的责任 这也使得测试更加困难