DTO conveter pattern in Spring Boot
主要问题是如何在不违反 SOLID 原则的情况下将 DTO 转换为实体,将实体转换为 Dtos。
例如,我们有这样的json:
{ id: 1,
name: "user",
role: "manager"
}
数字孪生是:
public class UserDto {
private Long id;
private String name;
private String roleName;
}
实体是:
public class UserEntity {
private Long id;
private String name;
private Role role
}
public class RoleEntity {
private Long id;
private String roleName;
}
还有有用的Java 8 DTO conveter模式。
但在他们的例子中,没有一对多的关系。为了创建用户实体,我需要使用 dao 层(服务层)按角色名称获取角色。我可以将 UserRepository(或 UserService)注入 conveter 吗?因为转换器组件似乎会破坏SRP,所以它只能转换,不能知道服务或存储库。
转换器示例:
@Component
public class UserConverter implements Converter<UserEntity, UserDto> {
@Autowired
private RoleRepository roleRepository;
@Override
public UserEntity createFrom(final UserDto dto) {
UserEntity userEntity = new UserEntity();
Role role = roleRepository.findByRoleName(dto.getRoleName());
userEntity.setName(dto.getName());
userEntity.setRole(role);
return userEntity;
}
....
在 conveter 类中使用存储库好吗?或者我应该创建另一个服务/组件,负责从DTO创建实体(如UserFactory)?