【问题标题】:How will you design classes with many parameters and different clients您将如何设计具有许多参数和不同客户端的类
【发布时间】:2021-07-23 02:28:27
【问题描述】:

例如,如果我们有一个有 8 个参数的类:

class TestClass(
    private val paramA: ParamA, 
    private val paramB: ParamB,
    private val paramC: ParamC,
    private val paramD: ParamD,
    private val paramE: ParamE,
    private val paramF: ParamF,
    private val paramG: ParamG,
    private val clientA: ClientA,
    private val clientB: ClientB
)

大多数时候,当使用这个类时,总是会传递前 7 个参数。最后两个参数将取决于用例。如果我们需要使用clientA调用其他函数,它会传递clientA,clientB为null。如果我们需要使用clientB调用其他函数,它会传递clientB,clientA为null。在类内部,clientA 或 clientB 将用于调用其他函数,具体取决于哪个不为空。

我们可以在这里使用不同的方法吗?我不喜欢使用 if...else... 检查 clientA 或 clientB 是否为空,然后执行其他操作。我们可以将这两个参数替换为

private val clientGeneric: ClientGeneric

那么clientA 和clientB 可以从ClientGeneric 继承并传递给TestClass。但我没有看到让 clientA 和 clientB 从 ClientGeneric 类继承的好方法。

【问题讨论】:

  • “但我没有看到让 clientA 和 clientB 从 ClientGeneric 类继承的好方法。”为什么不呢?
  • 你能定义什么是客户端吗?就像那些客户对云提供商一样吗?像 azure-client 和 aws-client 一样?其他功能是什么意思?
  • 一些内部Java服务客户端调用服务API

标签: kotlin oop design-patterns


【解决方案1】:

刚刚想到了以下方法。这看起来对吗?

interface TestGeneric {
    fun testFun()
}

class Client1 (clientA: ClientA): TestGeneric {
    override fun testFun() {
        System.out.println("from client 1")
    }
}

class Client2 (clientB: ClientB): TestGeneric {
    override fun testFun() {
        System.out.println("from client 2")
    }
}

class ClientA

class ClientB

class TestClass (private val test: TestGeneric) {
    fun testtest() {
        test.testFun()
    }
}

【讨论】:

    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2020-03-22
    • 1970-01-01
    • 2021-07-04
    • 2020-12-28
    相关资源
    最近更新 更多