Kotlin扩展功能可拆分大类

时间:2018-10-29 10:48:19

标签: android kotlin

最近在我公司,辩论是在审查了编写重型班级的另一种方法之后开始的。

必须使用Kotlin重写一个大型Java类,该类具有组件特定的逻辑(没有标准的OOP原理有意义)。提供的解决方案是将类别中的逻辑和类别中的逻辑拆分为单独的文件,并具有对主类的内部扩展功能。

示例:

Main.kt
class BigClass {
  // internal fields exposed to the extension functions in different files

  // Some main logic here
}


BusinessLogic.kt
internal fun BigClass.handleBussinessCase() {
 // Complex business logic handled here accessing the exposed internal fields from BigClass
}

您对此有何看法?我可能还没有看到它在任何地方使用的可能是有充分的理由,但是替代千行类似乎更糟。

2 个答案:

答案 0 :(得分:0)

关于为该类创建扩展功能的一些想法:

  • 这将是一个实用函数,将对您要扩展的对象进行操作,它将不是一个对象函数,这意味着它将只能访问public方法和属性;
  • 如果您打算使用在单元测试中扩展的类,这些方法(扩展名)将更难模拟;
  • 与继承的对象一起使用时,它们很可能不会表现出预期的效果。

也许我错过了一些东西,所以请阅读有关扩展here的更多信息。

答案 1 :(得分:0)

您必须考虑扩展函数不过是带有隐式第一个参数的函数,而该参数由this引用。

因此,您的情况如下:

internal fun handleBussinessCase(ref: BigClass)

将会转换为 Java

static void handleBussinessCase(BigClass ref)

但这可以被认为是委托模式,也可以封装在 Kotlin 中。

由于这些属性必须是内部,因此您可以将它们作为data class注入到较小的用例中。如果围绕它们定义一个接口(尽管这会使属性成为 public ),则可以使用它创建一个委托模式,并在实现中仍使用this引用每个属性。