如何在Kotlin后端进行最佳的DTO映射?

问题描述 投票:0回答:1

我的方法就像我有我的实体类一样:

data class User(
  private val name: String,
  private val age: Int
)

我有一个 DTO:

data class UserDto(
  val name: String,
  val age: Int
)

映射器函数是 User 的扩展函数(在我的类文件中):

User.mapToDto(UserDto u) {
  this.name = u.name
  this.age = u.age
}

我怀疑这种方法是否是最好的,因为我的 DTO 没有私有修饰符,认为它是 val 属性(因此不会更改)。或者有一个最好的方法来做到这一点,尊重封装等概念和所有干净的代码其他东西。

我已经尝试制作一个映射器(在另一个文件中),但不起作用,因为我的实体类具有私有访问权限,因此有必要在我的 User 类中执行此操作。

spring kotlin backend dto
1个回答
0
投票

您可以使用构造函数或(扩展)函数返回对象。

使用构造函数,它看起来像这样:

data class UserDto(
  val name: String,
  val age: Int
){
    constructor(user: User) :  this(user.name, user.age){}
}
val dto = UserDto(user);

有了扩展函数,就可以使用现有的构造函数了:

User.mapToDto() {
    return UserDto(name, age);
} 
val dto = user.mapToDto()

请注意,这两种方法都需要

name
age
才能访问。 如果你不想这样,你需要将该方法添加到
User
:

data class User(
  private val name: String,
  private val age: Int
){
    fun mapToDto() {
        return UserDto(name, age);
    }  
}
© www.soinside.com 2019 - 2024. All rights reserved.