如何处理调用存储库并在两个单独的 ViewModel 中使用的函数

问题描述 投票:0回答:1

我有两个包含相同功能的 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
    }
kotlin android-jetpack-compose repository viewmodel
1个回答
0
投票

我认为您正在寻找的是域层

从第一个片段开始:

领域层负责封装复杂的业务逻辑,或者被多个ViewModel重用的简单业务逻辑。该层是可选的,因为并非所有应用程序都有这些要求。您应该仅在需要时使用它 - 例如,处理复杂性或支持可重用性。

© www.soinside.com 2019 - 2024. All rights reserved.