将实体传递给私有方法以从请求 DTO 进行更新

罗伯特·布什

我的 Spring Boot 应用程序实现了一个Service类,该类从RestController. 这个服务方法负责更新一个实体。

由于要更新的​​字段很多,为了更好的可读性,我将更新逻辑分成了几个私有方法,如下所示:

@Transactional
public void updateUser(UserRequest userRequest) {}
    final User user = userRepository.findById(userRequest.getId).orElseThrow(() -> new EntityNotFoundException()));
    updateUserFromRequest(user, userRequest);
}

private void updateUserFromRequest(User user, UserRequest userRequest) {
    updateUserMainData(user, userRequest);    
    updateUserAdditionalData(user, userRequest);
}

private void updateUserMainData(User user, UserRequest userRequest) {
  user.setProperty1(userRequest.getProperty1());
  user.setProperty2(userRequest.getProperty2());
  user.setProperty3(userRequest.getProperty3());
}

private void updateUserAdditionalData(User user, UserRequest userRequest) {
  user.setProperty4(userRequest.getProperty4());
  user.setProperty5(userRequest.getProperty5());
  user.setProperty6(userRequest.getProperty6());
}

虽然这工作得很好,但将User对象传递给私有方法感觉“尴尬” 这种方法被认为是“良好实践”还是有其他模式?

若昂·迪亚斯

一种可能性是User通过添加update(UserRequest userRequest)方法这种复杂性隐藏在类本身中不再User被传递到私有方法中(这可能会被认为有副作用)。

如果您不想向实体类添加逻辑,另一种使其不那么“尴尬”的可能性是让所有updateXXXX()方法返回更新的User. 当然,这在实际中没有任何改变,但它暗示User确实在方法中进行了更新,减少了一点“具有副作用的方法”的感觉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章