MVVM中基类抽取ViewModel的一点小实践经验

MVVM中基类抽取ViewModel的一点小实践经验

前提

之前写了一遍抽取BaseFragment的,链接:
抽取BaseFragment

ViewModel

viewmodel比较简单,主要是用来处理数据的,所以抽取基类比较简单,共性应该就是加载数据的过程,这个过程应该通知基类的Fragment,比如说loading时,就需要告诉fragment在loading,loaded也一样,于是:

public class BaseViewModel extends ViewModel {
    private MutableLiveData<Integer> mViewStatus = new MutableLiveData<>();
    
    //下面这些可以定义一个枚举类型,或者常量都可以
    public void showLoading() {
        mViewStatus.postValue("loading值");
    }

    public void showLoadSuccess() {
        mViewStatus.postValue("LoadSuccess值");
    }

    public void showEmpty() {
        mViewStatus.postValue("LoadEmpty值");
    }

    public void showLoadFailed() {
        mViewStatus.postValue("LoadFailed值");
    }
}

这个Livedata刚好在BaseFragment里面观察,然后去调具体的方法显示

引入lifecycle来无感化解决异步请求带来的OOM

在之前的那边文章中,创建ViewModel的时候将当前fragment的lifecycle给到ViewModel中,这样需要有一个来接收,于是:

public class BaseViewModel extends ViewModel {
private MutableLiveData mViewStatus = new MutableLiveData<>();

protected Lifecycle mLifecycle;
//这个需要导入rxjava的包
private CompositeDisposable mDisposables;


public void setLifecycle(Lifecycle lifecycle) {
    this.mLifecycle = lifecycle;
}

//下面这些可以定义一个枚举类型,或者常量都可以
public void showLoading() {
    mViewStatus.postValue("loading值");
}

public void showLoadSuccess() {
    mViewStatus.postValue("LoadSuccess值");
}

public void showEmpty() {
    mViewStatus.postValue("LoadEmpty值");
}

public void showLoadFailed() {
    mViewStatus.postValue("LoadFailed值");
}

@Override
protected void onCleared() {
    super.onCleared();
    if (mDisposables != null) {
        mDisposables.dispose();
        mDisposables = null;
    }
    if (mLifecycle != null) {
        mLifecycle = null;
    }
    super.onCleared();
}

/**
 * 添加rx操作到容器中
 * @param disposable
 */
public void addDisposable(Disposable disposable) {
    if (mDisposables == null) {
        mDisposables = new CompositeDisposable();
    }
    mDisposables.add(disposable);
}

}

很简单哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ViewModelMvvm设计模式的一个重要组成部分,它的主要作用是将Model和View进行解耦,将业务逻辑从View分离出来,使得View更加轻量级、易于测试和维护。 以下是ViewModel设计的一些常用技巧: 1. ViewModel应该只包含业务逻辑和数据,不应该包含任何UI相关的代码。这意味着ViewModel应该与具体的UI框架无关,可以在不同的平台上重用。 2. ViewModel应该暴露一些属性和命令,以便View可以绑定它们。这些属性和命令应该与View所需的数据和操作相对应。 3. ViewModel应该与Model进行交互,获取数据并对数据进行处理。这可以通过使用依赖注入来实现,将Model注入到ViewModel。 4. ViewModel应该具有可测试性。这意味着ViewModel应该易于测试,可以使用单元测试框架进行测试。 5. ViewModel应该遵循单一职责原则,仅包含与其关联的业务逻辑和数据。这有助于保持ViewModel的简洁性和可维护性。 6. ViewModel应该与View进行双向绑定,以便View可以及时地更新UI状态。这可以通过使用数据绑定库来实现,例如Android的Data Binding。 7. ViewModel应该使用异步任务来执行长时间运行的操作,以避免阻塞UI线程。这可以通过使用协程或RxJava等库来实现。 总之,设计一个好的ViewModel需要考虑到可测试性、可重用性、简洁性和可维护性等多个方面,以便在实际开发能够提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值