ビルダーパターンを使用して構築されたオブジェクトを想定しましょう。
このビルダーパターンには、build
フィールドの検証とターゲットタイプへの変換に焦点を当てたメソッドが含まれます。
この検証は、以下を使用して実装できます。
Either[FailureObject, TargetObject]
タイプTry[TargetObject]
(Scala 2.10の新機能)Validation[FailureObject, TargetObject]
またはValidationNEL[FailureObject, TargetObject]
scalazライブラリから
Validation
オーバーEither
タイプの主な利点の1つは、Validation
「箱から出して」障害を蓄積できることです。
しかし、「新しい」Try
方法はどうでしょうか。Try
箱から出してすぐに使える「モナディック」メソッドもあることに気づきました。たとえばmap
、 。flatMap
の助けを借りずにどちらのタイプでも本当に欠けていたものですProjection
。
Try[FieldType]
したがって、各フィールド検証メソッドがaを返し、より正確には、障害が発生した場合にTry[SpecificFieldExceptionType]
;を返すことを想像します。このネストされたものString
には、メソッド全体で蓄積できるメッセージフィールドとrootCauseフィールドが含まれていますbuild
。
Scala 2.10を使用して、Try
ビルダーパターンのような単純な検証のためにscalaz検証ライブラリを置き換える練習をすることができますか?
**編集****
Try
ソースコードを読み取ることにより、Try
いくつかの例外を蓄積できないように聞こえ、したがってフェイルファストに向けられます。Try.flatMap
潜在的な以前の失敗を返すことさえあるので、蓄積の概念がありません:
def flatMap[U](f: T => Try[U]): Try[U] = this.asInstanceOf[Try[U]]
それどころか、ValidationNEL
蓄積機能を処理します。
確認はありますか?