Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,我是否使用ViewModel执行插入或更新?_Android_Mvvm_Architecture - Fatal编程技术网

Android,我是否使用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

我知道体系结构组件中的ViewModel用于存储和管理数据,因此在配置更改期间不会丢失数据

例如,我的活动与LiveData或使用存储数据无关。我还应该浏览ViewModel吗?或者直接实例化Repo类并调用插入方法?我希望这是有意义的

我使用ViewModel的一个示例

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实际上需要将表示状态与最终用户看到的视图分离开来。正如维基所说-
视图模型是公开公共属性和命令的视图的抽象。MVVM不是MVC模式的控制器,也不是MVP模式的演示者,而是一个活页夹,它自动化视图和视图模型中绑定属性之间的通信。视图模型被描述为模型中数据的状态

因此,主要是与应用程序的视图部分之间的抽象(与所有其他GUI架构模式一样),这样它们就可以独立变化,对系统的后续更改也会很便宜

  • 实例化视图范围中的域对象及其随后被视图使用会导致视图和域对象之间的紧密耦合,这是任何系统的一个坏特性。此外,这也是更改视图内部结构的另一个原因,因为若域对象的构造逻辑发生更改,视图也必须更改

如果<代码> VIEWSMODS对你来说是Extrut(如我所见,在这个特定的情况下,它的好处与你无关,因为UI不是很复杂,它的状态是轻量级的),考虑使用一个不太重的抽象,比如MVP。因此,您将能够在应用程序中保留视图和模型之间的抽象(没有不必要的耦合),并且您不必支持不从中受益的代码。

我认为您希望使用ViewModel来尽可能保持UI控制器的干净。您的viewmodel应该调用repo来执行简单的CRUD操作。 见以下文件:

需要UI控制器 还负责从数据库或网络加载数据 将膨胀添加到类中。将过多的责任分配给UI 控制器可以生成一个类,该类尝试处理所有 应用程序本身的工作,而不是将工作委托给其他类。 以这种方式向UI控制器分配过多的责任 这也使得测试更加困难