2016-10-30 17 views
1

私はあなたの助けが必要です!サービス検証:検証が失敗した場合は例外をスローします

私のWebプロジェクト(Spring MVCに基づいています)では、いくつかの検証が失敗したことを示すために例外を使用していますが、正しいことをしているかどうかはわかりません。私はこの1つarticleを読んだ

@Service 
@Transactional 
public class UserService { 

@Autowired 
private UserRepository userRepository; 

public User createUser(UserDTO userDTO) throws IllegalArgumentExceptio { 
    validateUserEmail(userDTO); 
    return userRepository.save(new User(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(), userDTO.getPassword())); 
} 

private void validateUserEmail(UserDTO userDTO) throws IllegalArgumentException { 
     String emailPattern = "^[a-z0-9-\\+]+(\\.[a-z0-9-]+)*@" 
       + "[a-z0-9-]+(\\.[a-z0-9]+)*(\\.[a-z]{2,})$"; 

     if (userDTO() == null) { 
      throw new IllegalArgumentException(INVALID_EMAIL_NULL.getMessage()); 
     } else if (userDTO().length() > 25) { 
      throw new IllegalArgumentException(INVALID_EMAIL_LENGTH.getMessage()); 
     } else if (!userDTO().matches(emailPattern)) { 
      throw new IllegalArgumentException(INVALID_EMAIL_FORMAT.getMessage()); 
     } 
    } 
} 

:たとえば

iは、このようなサービスを提供しています。また、Hibernate Validatorを使用する方法もあります。

したがって、主な質問は、どちらのアプローチがベストプラクティスであり、なぜですか?

  1. 私はそうであるように検証中に例外をスローします。
  2. notification patternのようなものを使用してください。
  3. Hibernate Validatorを使用してください。
+0

私の答えは助けましたか? – developer

+0

@ javaguyはい、それは私を助けました。ありがとう – TimurJD

答えて

1

明らかに、利用可能なライブラリであるのHibernate Validator for Bean Validationsを使用すると、最小長/最大長などの膨大なコードを明示的に書き換える必要はありません。

また、minlength/maxlength検証のロジックを書き直す場合は、書かれたコードが正しいことを確認するために広範なテストを行う必要があります。

親指のルールは、すでに信頼できるコードがある場合は、というDRY(自分自身を再現しない)の原則という非常に重要な部分を再利用/再書き込みしようとしないでください。任意のプログラミング

0

これは非常に悪い考えです。あなたのソリューションには、あなたの電子メール検証が失敗した場合に、どのようにユーザーに通知するつもりですか?私はcustom validation annotationに行きます。電子メールの検証が失敗した場合は、falseを返すだけです。この方法では、単にBindingResultにエラーが含まれるため、電子メールの検証が失敗した場合にユーザーに簡単に通知することもできます。また、別の利点は、エラーメッセージのローカライズです。だからええ、Hibernateのvalidatiorは行く方法です。

関連する問題