ビルダーパターンを使用して構築されたオブジェクトを想定しましょう。
このビルダーパターンには、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蓄積機能を処理します。
確認はありますか?