假设使用生成器模式构建的对象。
此构建图案将包含build
方法侧重于字段的验证,然后在转换到目标类型。
该验证可以采用以下方式实现:
-
Either[FailureObject, TargetObject]
键入 -
Try[TargetObject]
从斯卡拉2.10新功能) -
Validation[FailureObject, TargetObject]
或ValidationNEL[FailureObject, TargetObject]
从scalaz库
我读到的主要优势之一Validation
了Either
类型是Validation
可以累积失败“开箱即用”。
但对于“新”的Try
呢? 我注意到, Try
了“一元”的方法开箱即用也一样, map
, flatMap
等...什么真正用任何一种类型的不帮助缺少Projection
。
因此,我想像每个字段的验证方法返回Try[FieldType]
和更精确地,在任何故障的情况下,一个Try[SpecificFieldExceptionType]
; 此嵌套一个包含String
消息字段和可能在整个被累积一个rootCause复制字段build
方法。
使用Scala的2.10,可以或应该Try
的做法取代scalaz验证库进行简单的验证像生成器模式涉及?
**编辑* ***
通过阅读Try
的源代码,这听起来是Try
不能积累一些例外,因而是面向快速失败的。 即使Try.flatMap
返回potentential以前的失败,因此不会有积累的概念:
def flatMap[U](f: T => Try[U]): Try[U] = this.asInstanceOf[Try[U]]
论相反ValidationNEL
,处理积累功能。
任何确认?