我有两个包含相同功能的 ViewModel。该函数调用接口/存储库以从数据库检索数据,然后该函数操作该数据。
我的理解是,存储库应该只处理对数据库的调用,ViewModel 永远不应该相互交互。我也不希望这个函数驻留在两个 ViewModel 中,因为这会对数据库产生不必要的额外调用,而且对我来说这似乎是多余的代码。
因此,让此函数只编写一次并可供两个 ViewModel 访问的最佳实践是什么?
存储库:
class PartsScreenImpl : PartsScreenRepository {
private val log = logging("KMLogging Tag")
private val db = Firebase.firestore
private val storage = Firebase.storage
override suspend fun getPartsList(): QuerySnapshot {
val result = db.collection("parts").get()
val doc = result.documents
return result
}
}
有问题的功能
private fun getPartsList() : List<Part>? {
val result = runBlocking {
val querySnapshot = async {
return@async repository.getPartsList()
}.await()
return@runBlocking querySnapshot
}
val documents = result.documents
var partsList: MutableList<Part>? = null
for (document in documents) {
val partNumber = document.get<String>("part_number")
val partDesc = document.get<String>("part_desc")
val partImage = getImageUrl(partNumber)
val part = Part(partNumber, partDesc, partImage)
if (partsList == null) {
partsList = mutableListOf(part)
} else {
partsList.add(part)
}
}
return partsList
}
我认为您正在寻找的是域层
从第一个片段开始:
领域层负责封装复杂的业务逻辑,或者被多个ViewModel重用的简单业务逻辑。该层是可选的,因为并非所有应用程序都有这些要求。您应该仅在需要时使用它 - 例如,处理复杂性或支持可重用性。