Лучший способ обработать валидацию полей объекта => Either / Try (scala 2.10) / ValidationNEL (scalaz)

Давайте предположим, что объект построен с использованием шаблона построителя.

Этот шаблон строителя будет содержатьbuild метод, сосредоточенный на проверке полей, а затем на преобразовании в целевой тип.

Эта проверка может быть реализована с использованием:

Either[FailureObject, TargetObject] типTry[TargetObject] (новая функция из Scala 2.10)Validation[FailureObject, TargetObject] или жеValidationNEL[FailureObject, TargetObject] из библиотеки скалаза

Я прочитал, что одно из главных преимуществValidation надEither типа этоValidation может накапливать сбои "из коробки".

А как же "новый"Try путь? Я заметил, чтоTry имеет "монадические" методы из коробки также, какmap, flatMap и т. д. ... чего действительно не хватало в любом типе без помощиProjection.

Таким образом, я представляю, что каждый метод проверки поля возвращаетTry[FieldType] а точнее, в случае любого сбоя,Try[SpecificFieldExceptionType]; этот вложенный, содержащийString поле сообщения и поле rootCause, которое может быть накоплено на протяженииbuild метод.

Используя Scala 2.10, можно или нужноTry Практика заменить библиотеку проверки скаляза для простой проверки, как в случае с шаблоном компоновщика?

**РЕДАКТИРОВАТЬ****

ЧтениемTry Исходный код, звучит так, чтоTry не может накапливать несколько исключений и поэтому ориентирован на отказоустойчивость. ЧетныйTry.flatMapвозвращает потенциальный предыдущий сбой и поэтому не имеет понятия накопления:

def flatMap[U](f: T => Try[U]): Try[U] = this.asInstanceOf[Try[U]]

НаоборотValidationNEL это обрабатывает функцию накопления.

Любое подтверждение?

Ответы на вопрос(1)

Ваш ответ на вопрос