莱州网站建设价格,61制作工厂网站,南城网站仿做,网站制作软件排行榜1.什么是MVVM#xff1f;
MVVM全称是Model View ViewModel#xff0c;Model即数据模型#xff0c;View指的是Activity或者Fragment#xff0c;和MVP架构中的数据层、界面层意义是一样的。这里新增的ViewModel#xff0c;是用来代替Presenter#xff0c;和底层业务逻辑交…1.什么是MVVM
MVVM全称是Model View ViewModelModel即数据模型View指的是Activity或者Fragment和MVP架构中的数据层、界面层意义是一样的。这里新增的ViewModel是用来代替Presenter和底层业务逻辑交互并持有数据内部通过LiveData去关联界面View和数据Model。
2.为什么不太推荐使用MVP
MVP架构最大的问题是View和Presenter新增接口太多同时还需要去手动管理View的生命周期。业务简单还好接口不会很多。一旦业务量复杂的情况下使用MVP方式就会很痛苦。 但是用MVVM就可以很好解决这些问题。首先ViewModel和View层之间是不需要接口的View层通过对特定LiveData数据的观察就可以把逻辑处理好的数据更新到界面上。同时ViewModel对Activity或者Fragment的生命周期是有感知的可以很好地管理数据的收发。 可以理解为MVVM架构是一个改进版的MVP架构。
3.MVVM可以不使用dataBinding吗
MVVM并不等同于DataBinding只不过二者总是混合在一起使用导致很多人以为DataBinding就是MVVM。DataBinding是一个实现数据和UI绑定的框架是构建MVVM模式的一个工具。 我们在架构MVVM模式特别是业务复杂切追求稳定性的企业级软件的时候个人并推荐使用DataBinding。因为DataDinding有个最大的问题是它的调试比较麻烦一旦出现问题可能会显得束手无策不可控。
4.稳健的软件架构模式
通常是ViewActivity/Fragment- ViewModel - Repository -NetWork/DataBase/三方SDK接口 这里的ViewModel是负责持有数据而Repository则是提供获取数据和数据加工处理。关联方式如下 首先定义ViewModel的构造函数
class HeFengViewModel(private val repository: HefengRepository) : ViewModel() {......
}然后重写Viewmodel的工厂方法通过工厂方法把Repository参数传进去
class HeFengModelFactory(val repository : HefengRepository) : ViewModelProvider.NewInstanceFactory() {override fun T : ViewModel? create(modelClass: ClassT): T {return HeFengViewModel(repository) as T}
}然后再通过ViewModelProviders获取到ViewModel
object InjectorUtil {fun getHeFengModelFactory() HeFengModelFactory(getHeFengRepository())
}class HefengActivity : AppCompatActivity() {val viewModel by lazy { ViewModelProviders.of(this, InjectorUtil.getHeFengModelFactory()).get(HeFengViewModel::class.java) }}