Oop 统一数据类属性访问的最佳实践是什么
我有一门课要上Oop 统一数据类属性访问的最佳实践是什么,oop,kotlin,generics,inheritance,Oop,Kotlin,Generics,Inheritance,我有一门课要上 data class ExpenseDto( val id: Int, val name: String, val aggregationA: ExpenseAggregationA, val aggregationB: ExpenseAggregationB, val aggregationC: ExpenseAggregationC, ) 它的所有关联都有相同的字段。在这里可以应用哪些最佳实践来实现这一目标 data class Ex
data class ExpenseDto(
val id: Int,
val name: String,
val aggregationA: ExpenseAggregationA,
val aggregationB: ExpenseAggregationB,
val aggregationC: ExpenseAggregationC,
)
它的所有关联都有相同的字段。在这里可以应用哪些最佳实践来实现这一目标
data class ExpenseAggregationA(
val id: Int,
val text: String? = null
)
data class ExpenseAggregationB(
val id: Int,
val text: String? = null
)
data class ExpenseAggregationC(
val id: Int,
val text: String? = null
)
数据类
es可以从密封类
继承
sealed class ExpenseAggParent (val id: Int, val text: String? = null) {
data class ExpAggA( override val id: Int, override ...)
data class ...
data class ...
}
除此之外,有时我喜欢使用“property unifier”接口,尤其是在重构遗留代码时,使用具有相同语义但属性名称不同的类:
interface HasId(val id: Int)
data class ExpenseAggregationX(
override val id: Int,
...
): HasId
data class ExpenseAggregationY: HasId {
val someOtherNameButStillId: Int
override val id: Int
get() = this.someOtherNameButStillId
}
当然,您可以使用良好的旧界面,但为此,您可以重复使用上述方法:
interface ExpenseAggregation: HasId, HasText
data class ExpenseAggregationA(
override val id: Int,
...
): ExpenseAggregation
// Other approach for classes with other existing names, see above
data class ExpenseAggregationB: ExpenseAggregation {
...
}
这接近于Kotlin目前不直接支持的混合方法,但为了完整性,如果您的类是服务而不是DTO,则可以使用该方法。您不能只使用1个数据类
ExpenseAgregation
?或者您希望这些类型是分开的吗?我需要这些类型是分开的,因为它们与不同的模式有关系