चलिए एक निर्माता पैटर्न का उपयोग करके निर्मित ऑब्जेक्ट मानते हैं।ऑब्जेक्ट के फ़ील्ड सत्यापन को संभालने का सबसे अच्छा तरीका => या तो/कोशिश करें (स्केल 2.10)/वैलिडेशननेल (स्केलज़)
इस बिल्डर पैटर्न लक्षित प्रकार के रूपांतरण पर खेतों मान्यता पर ध्यान केंद्रित कर एक build
विधि होते हैं और उसके बाद होगा।
इस मान्यता का उपयोग कर लागू किया जा सकता:
मुझे लगता है कि में से एक को पढ़ने के लिए (स्काला 2.10 से नई सुविधा)
Either[FailureObject, TargetObject]
प्रकारTry[TargetObject]
Validation[FailureObject, TargetObject]
याValidationNEL[FailureObject, TargetObject]
scalaz पुस्तकालय सेValidation
केEither
से अधिक के मुख्य फायदेहै"बॉक्स से बाहर" विफलताओं को जमा कर सकता है।लेकिन "नया"
Try
तरीका के बारे में क्या? मैंने देखा है किTry
भी बॉक्स से बाहर "monadic" तरीकों,map
,flatMap
आदि की तरह ... क्या वास्तव मेंProjection
की मदद के बिना किसी भी प्रकार के साथ याद आ रही थी।इस प्रकार, मैं एक
Try[FieldType]
और वापस लौटने वाले प्रत्येक क्षेत्र सत्यापन विधि कल्पना अधिक सटीक, किसी भी विफलता के मामले में, एकTry[SpecificFieldExceptionType]
; इस नेस्टेड मेंString
संदेश फ़ील्ड और एक रूटकॉज़ फ़ील्ड है जिसेbuild
विधि में जमा किया जा सकता है।स्काला 2.10 का उपयोग करना, कर सकते थे या
Try
अभ्यास सरल सत्यापन के लिए scalaz सत्यापन पुस्तकालय बदलना चाहिए बिल्डर पैटर्न की तरह शामिल है?** संपादित * ***
Try
स्रोत कोड को पढ़ने के द्वारा, यह लग रहा है किTry
कई अपवाद जमा नहीं कर सकता है और इस तरह उन्मुख है असफल फास्ट। भीTry.flatMap
potentential पिछले विफलता देता है और इतने संचय की धारणा नहीं है:def flatMap[U](f: T => Try[U]): Try[U] = this.asInstanceOf[Try[U]]
ValidationNEL
के विपरीत है कि संचय सुविधा संभालती पर।कोई पुष्टि?
एक बेहतर उत्तर => बहुत अच्छी तरह से समझाया नहीं जा सका! बहुत बहुत धन्यवाद :) वास्तव में, मैंने अपने बिल्डर के साथ काम करने के लिए सत्यापन चुना है। – Mik378
@ मिक 378 धन्यवाद! – mergeconflict