使用 kotlin 创建数据库工厂

Creating a DB factory using kotlin

所以我正在尝试用 kotlin 创建一个 MongoDB 工厂...但我认为我不太理解 companion object 的概念,因为我什至无法理解这个要编译:

package org.jgmanzano.storage

import com.mongodb.MongoClient
import com.mongodb.MongoClientURI
import com.mongodb.client.MongoDatabase

class MongoConnectionFactory(private val connectionURI: String) {
    private var database: MongoDatabase

    init {
        val connectionString = MongoClientURI(connectionURI)
        val mongoClient = MongoClient(connectionString)
        database = mongoClient.getDatabase("paybotDB")
    }

    companion object {
        fun getDatabase() : MongoDatabase {
            return database
        }
    }
}

你们将如何实现这一目标?我的想法是创建 Java 中的一种 工厂方法 。我似乎无法正确理解语法。

此外,这是否是数据库连接工厂的正确方法?

将所有内容移动到伴随对象,将连接 URI 传递给 getDatabase 方法。 伴随对象被编译为包含(外部 class)内的静态字段。由于该字段是静态的,它无法访问外部 class 的字段,因为外部 class 是一个实例。

我假设您想缓存数据库对象。

class MongoConnectionFactory() {

    companion object {
        private var database: MongoDatabae? = null

        fun getDatabase(connectionURI: String) : MongoDatabase {
            if (database != null) {
                return database
            {
            val connectionString = MongoClientURI(connectionURI)
            val mongoClient = MongoClient(connectionString)
            database = mongoClient.getDatabase("paybotDB")
            return database
        }
    }
}

但是您不需要嵌套在其中包含 class 的伴生对象。 您可以改为创建一个对象。

object MongoConnectionFactory {
    private var database: MongoDatabae? = null

    fun getDatabase(connectionURI: String) : MongoDatabase {
        if (database != null) {
            return database
        {
        val connectionString = MongoClientURI(connectionURI)
        val mongoClient = MongoClient(connectionString)
        database = mongoClient.getDatabase("paybotDB")
        return database
    }
}

如果您需要具有不同连接 URI 的多个数据库,则将它们存储在散列中 table。