2016-03-27 71 views
3

我需要一个用于我的spring-boot项目的用户管理服务。我一般都明白春天使用DTO(数据传输对象)。但是当我想要设计服务时,我只用一个“User”模型使用多个DTO,例如UserDTO,RegisterUserDTO,UpdateUserDTO,ManagedUserDTO .. UserDTO就像只读数据(输出数据包含用户名,电子邮件,名称)用于显示用户信息。但是RegisterUserDTO就像输入数据(带密码,confirmPassword为新用户创建密码),用于用户注册表单。 UpdateUserDTO用于管理员,因为管理员可以分配权限,启用或禁用用户。弹簧验证:多个DTO与具有多个验证器的单个DTO

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

我是否正确地使用了很多DTO?它应该像一个DTO一样使用多个验证器进行验证?

有没有其他的选择来简化它?

回答

3

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

  1. 具有不同的DTO允许在不同的情况下
  2. 你不必对付一个“大课”的验证,因为验证逻辑是在不同的场景不同的暴露对同一User对象的不同和相关信息。如果一切都在一个类中,那么你将会很难,特别是在验证中,因为某些字段不一定要在给定的上下文中验证。另一方面,这可能会导致暴露不应该暴露的值,如果不小心,例如。密码等
  3. 允许尽可能使用继承。例如,如您所述,UserDTO包含有关任何用户的一般信息,而RegisterUserDTO可以继承UserDTO,而不必重复UserDTO的属性和验证注释。

除此之外,您还可以使用Spring's conversion service为您在不同的DTO之间进行转换,并且此转换完全与核心业务逻辑分离。我认为这不是一个好处,但是当有许多这样的DTO时,转换服务使它不那么痛苦。