android - 如何在 KotlinMultiPlatform 模块中访问 clientApp 的现有 realmDB

我正在尝试在 KMM 中构建通用数据解析模块,我需要将数据保存在客户端的 Android 应用程序或 iOS 应用程序中已经存在的同一领域数据库中?我想知道这是否可行,或者我们可以在客户端和 KMM 模块中访问它吗?

回答1

您不能从 kotlin multiplatform 公共区域访问平台相关代码。但反之亦然。查看https://en.wikipedia.org/wiki/Hexagonal_architecture_(software)

在 Kotlin 通用资源中,至少有以下这些类。根据需要更改类和方法名称。

// kotlin common

interface PlatformWrapper {
    fun save(some: DataX)
    // ... other methods
}

// Database will never know anything about Realm, Room, Sqlite ...
// Database will work only with PlatformWrapper
class Database(private val db: PlatformWrapper) {
    fun saveWork() {
            // some code
            db.save(...)
    }
}

在 android 代码源中,您必须包装领域数据库。

class AndroidRealmWrapper(
    private val realm : RealmDb...
) : PlatformWrapper {
    override fun save(something: DataX) {
        // convert the data for realm
        realm.save(somethingConverted)
    }
}

从平台的应用程序代码中使用它们。

val realmDb = ... // android implementation of realm

val realmWrapper = AndroidRealmWrapper(realm)
val db = Database(realmWrapper)

// Use only Database class
db.saveWork(...)

// You can change the database wrapper in future.
// i.e. If you decide to use any other db

IOS 实现类似于 android 实现。

希望能帮助到你。

相似文章

c# - 如何启动clientapp并运行xunit test

我想在我的应用程序中进行集成测试。我有asp.netcore应用程序,其中有一个角度客户端应用程序。我的问题是,当我的单元测试正在运行时,无法启动asp.netcore项目,而当我的asp.netco...

最新文章