Translate

середа, 31 грудня 2014 р.

Replacing Throwing Exceptions with Notification in Validations


Martin Fowler виклав цікаву (принаймні для мене) статтю.
Ідея така що коли пишеш валідатори потрібно не викидати ексепшини, а робити список повідомлень.
Тобто замінити ось такий код
class BookingRequest…
  public void check() {
     if (date == null) throw new IllegalArgumentException("date is missing");
     LocalDate parsedDate;
     try {
       parsedDate = LocalDate.parse(date);
     }
     catch (DateTimeParseException e) {
       throw new IllegalArgumentException("Invalid format for date", e);
     }
     if (parsedDate.isBefore(LocalDate.now())) throw new IllegalArgumentException("date cannot be before today");
     if (numberOfSeats == null) throw new IllegalArgumentException("number of seats cannot be null");
     if (numberOfSeats < 1) throw new IllegalArgumentException("number of seats must be positive");
   }


на


class BookingRequest…
  private void validateNumberOfSeats(Notification note) {
    if (numberOfSeats == null) {
      note.addError("number of seats cannot be null");
      return;
    }
    if (numberOfSeats < 1) note.addError("number of seats must be positive");
  }
Оскільки в моєму поточному проекті багато перевірок, думаю варто спробувати такий підхід