我使用DTO模式来管理Sping Boot REST应用程序中的HTTP主体。我为请求和响应使用了单独的DTO,因为响应包含附加数据。我为响应DTO使用了继承,因为包含的附加数据对于所有响应对象都是相同的。结构如下(省略了注解和方法以便于清除):
public abstract class BaseResponseDTO {
protected UUID id;
protected Integer version;
protected Date created;
protected Date modified;
}
public class RequestUserDTO {
private String firstName;
private String lastName;
}
public class ResponseUserDTO extends BaseResponseDTO {
private String firstName;
private String lastName;
}
此处存在明显的代码重复。最好让ResponseUserDTO同时扩展BaseResponseDTO和RequestUserDTO,但这是不允许的。
其他选择是使用组合,并具有如下内容:
public abstract class BaseResponseDTO {
protected UUID id;
protected Integer version;
protected Date created;
protected Date modified;
}
public class UserDTO {
private String firstName;
private String lastName;
}
public class RequestUserDTO {
private UserDTO payload;
}
public class ResponseUserDTO extends BaseResponseDTO {
private UserDTO payload;
}
我使用这种方法的问题是:
1.它仍然不能防止代码重复
1.它强制客户端将正文 Package 在payload
中
对此我们能做些什么呢?
1条答案
按热度按时间xam8gpfp1#
我认为您可以用
UserDTO
替换您的ResponseUserDTO
和RequestUserDTO
,并在其上扩展BaseResponseDTO
,当您使用UserDTO
发送请求主体时,代码不会关心您是否将其与BaseResponseDTO
沿着发送(因为我在此处未看到任何验证),因此如果您不打算在请求函数中使用这些内容,也没关系