【发布时间】:2020-06-24 17:56:25
【问题描述】:
我遵循 MVVM 设计模式,并且我的一些视图模型最终具有相当多的方法来将实时数据公开给活动/片段。
我想知道我是否可以以某种方式“分组”这些 getter 方法,我想出了这个......
class MyViewModel(private val repository: MyRepository) : ViewModel() {
/** RAW DATA: data received directly from the api **/
private val apiData1 = repository.getApiData1()
private val apiData2 = repository.getApiData2()
inner class ApiData {
// Expose only api data 1
fun getApiData1() = apiData1
}
/** UI DATA: data conveniently formatted for the UI **/
private var uiDataA = UiFactory.buildUiDataA(apiData1)
private var uiDataB = UiFactory.buildUiDataB(apiData2)
private var uiDataC = UiFactory.buildUiDataC(apiData1, apiData2)
inner class UiData {
// Expose all ui data
fun getUiDataA() = uiDataA
fun getUiDataB() = uiDataB
fun getUiDataC() = uiDataC
}
}
这样,如果我想访问一个方法,我需要实例化它的特定包装器。
原始数据:viewModel.RawData().getApiData1()
UI 数据:viewModel.UiData().getUiDataA()
class MyActivity {
val vm: MyViewModel = ... // Load view model:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
vm.UiData().getUiDataA().observe(...)
}
}
你能告诉我这是否是包装方法的好方法吗?这是一个好/坏的做法吗?替代品?
谢谢
【问题讨论】:
-
您能否澄清一下存储库和 UiFactory 函数的返回类型是什么?
标签: android kotlin mvvm viewmodel android-livedata