无需任何 Android 库即可访问共享首选项

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

几天前我正在接受采访。招聘人员问了我这个问题,但他回答后我不知道也不明白。问题是:

“我有一个多模块系统。我有一个数据模块和一个应用程序模块。假设我没有在我的数据模块中放入任何android库,这是禁止我添加它的。我如何注册或访问此数据模块中的共享偏好设置?”

我无法回答这个问题,但他用依赖倒置的方式说道。有人可以解释一下这是如何工作的吗?他的回答对我来说还不够。

android kotlin android-studio android-gradle-plugin solid-principles
1个回答
0
投票

这实际上是一个好问题,它验证了候选人是否知道如何设计模块化应用程序。

我们的想法是抽象数据加载和保存的方式。我们创建的界面不以任何方式引用 Android。根据具体情况,可能是这样的:

interface DataRepository {
    fun load(): MyData
    fun save(data: MyData)
}

该接口要么存储在数据模块中,要么存储在公共模块中,并且不以任何方式引用Android。

数据模块使用该接口。它使用它来加载和保存数据,但是它没有实现它,所以它不知道后面的数据库是什么类型。数据模块也不知道如何创建存储库 - 它从外部接收它。在数据模块中处理此问题的类可能如下所示:

class DataHandler(private val repo: DataRepository) {
    fun doSomething() {
        val data = repo.load()
        ...
        repo.save(data)
    }
}

应用程序模块知道如何访问数据,它实现了存储库:

class SharedPrefRepository : DataRepository {
    override fun load() = {
        // load the data from shared prefs
    }

    override fun save(data: MyData) {
        // save the data to shared prefs
    }
}

然后应用程序使用这样的数据模块:

val dataHandler = DataHandler(SharedPrefRepository())
dataHandler.doSomething()

这样,只有应用程序模块知道 Android 和共享首选项,但数据模块仍然可以访问共享首选项中的数据。

这种方法称为依赖倒置,因为数据模块知道它需要存储库作为其依赖项,但它不会直接获取此依赖项 - 它是提供给它的。

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