Лучший способ обработать валидацию полей объекта => 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
это обрабатывает функцию накопления.
Любое подтверждение?