gpt4 book ai didi

java - Spring 验证 : Multiple DTOs vs single DTO with multiple validators

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:23 25 4
gpt4 key购买 nike

我的 spring-boot 项目需要一个用户管理服务。我对spring中DTO(Data transfer object)的使用大体了解。但是当我考虑设计服务时,我只为一个“用户”模型使用多个 DTO,例如 UserDTO、RegisterUserDTO、UpdateUserDTO、ManagedUserDTO .. UserDTO 就像一个只读数据(带有用户名、电子邮件、姓名的输出数据)用于显示用户信息。但是 RegisterUserDTO 就像一个用于用户注册表的输入数据(带有密码,confirmPassword 为新用户创建密码)。 UpdateUserDTO 适用于管理员,因为管理员可以分配权限、启用或禁用用户。

另一个原因可能是因为验证,所以不同的 hibernate 注释 validator 可以应用于不同的 DTO。

我使用大量 DTO 是否正确?是不是应该像一个DTO一样,使用多个spring validator 进行验证?

是否有任何其他选项可以简化它?

最佳答案

在我看来,拥有多个 DTO 是有效的,并且会导致更清晰的逻辑。

  1. 拥有不同的 DTO 允许在不同情况下为同一 User 对象公开不同的相关信息
  2. 您不必在验证中处理一个“大类”,因为验证逻辑在不同的场景中是不同的。如果所有内容都在一个类中,您将遇到困难,尤其是在验证方面,因为某些字段不一定要在给定的上下文中进行验证。另一方面,如果不小心,这可能会导致暴露不应暴露的值,例如。密码等
  3. 尽可能允许使用继承。例如,正如您提到的,UserDTO 包含与任何用户有关的一般信息,RegisterUserDTO 可以继承 UserDTO 而不必重复 UserDTO 的属性 和验证注释。

除此之外,您还可以使用 Spring's conversion service为您在不同的 DTO 之间进行转换,并且此转换与核心业务逻辑完全分离。我认为这不是一个优势,但只要有很多这样的 DTO,转换服务就会减少痛苦。

关于java - Spring 验证 : Multiple DTOs vs single DTO with multiple validators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com