2012-03-11 17 views
18

मैं सत्यापन उद्देश्यों के लिए विशिष्टता पैटर्न का उपयोग करने के बारे में सोच रहा हूं। मुश्किल बात यह है कि उपयोगकर्ता को बताने का तरीका क्यों कुछ विशिष्टता संतुष्ट नहीं हुई थी। क्या होगा यदि Specification.IsSatisfiedBy() न केवल bool मान लौटाएगा, बल्कि विफलता का कारण भी होगा। यह कुछ इस तरह दिखेगा:सत्यापन के लिए विशिष्टता पैटर्न का उपयोग डीडीडी

interface ISpecification<T> 
{ 
    CheckResult IsSatisfiedBy(T candidate); 
} 

जहां CheckResult है:

class CheckResult 
{ 
    public bool IsSatisfied { get; } 
    public string FailureReason { get; } 
} 

Fowler & Evans काम में आंशिक रूप से संतुष्ट विशिष्टता जिसका उद्देश्य विवरण प्रदान करने के लिए वास्तव में क्या संतुष्ट नहीं था है की एक अवधारणा है। हालांकि उस दस्तावेज़ में, इसे अतिरिक्त विधि शेष के रूप में कार्यान्वित किया गया है जो विशिष्टता देता है जो उम्मीदवार द्वारा पूरा नहीं किया गया था।

तो सवाल यह है कि: सत्यापन उद्देश्यों के लिए विशिष्टता का उपयोग करते समय, उपयोगकर्ता को प्रतिक्रिया प्रदान करने के लिए कैसे दिया गया है कि एक निर्दिष्ट विशिष्टता संतुष्ट नहीं थी? क्या समाधान मैंने ऊपर प्रस्तुत किया है?

+0

सबसे पहले, क्या आप वास्तव में सुनिश्चित हैं कि विशिष्टता जाने का तरीका है? मेरा मतलब है, क्या प्रत्येक विनिर्देश उस संदर्भ को जानता है जहां एक मॉडल मान्य हो सकता है या मान्य नहीं है? मैं ज्यादा नहीं कह सकता क्योंकि मुझे नहीं पता कि डोमेन कैसा दिखता है। कुछ सरल सत्यापन के लिए मुझे लगता है कि यह ठीक है, लेकिन डेटा एन्नोटेशन सत्यापन गुण अभी क्या कर रहे हैं। – MikeSW

उत्तर

17

यद्यपि आप सत्यापन के लिए अपने विनिर्देशों कक्षाओं का उपयोग कर सकते हैं, मैं आप उन्हें अपने डोमेन के भीतर अलग अवधारणाओं के रूप में रखने का सुझाव देते हैं। आप पाते हैं कि आपको समान अंतर्निहित विनिर्देशों का पुन: उपयोग करने की आवश्यकता है लेकिन उद्देश्य और संदर्भ के आधार पर अलग-अलग "असफल कारणों" को वापस करने की आवश्यकता है। अधिक जानकारी के लिए this article देखें।

पोस्ट ऊपर संदर्भित के लेखक भी कृपया साझा GitHub के लिए कोड और NCommon के रूप में कोड पोस्ट किया गया है। विशेष रूप से इन क्षेत्रों की समीक्षा करें:

विनिर्देशों: https://github.com/riteshrao/ncommon/tree/v1.2/NCommon/src/Specifications

सत्यापन: https://github.com/riteshrao/ncommon/tree/v1.2/NCommon/src/Rules

+1

अच्छा। जवाब के लिए धन्यवाद। – Markus

+0

खुशी हुई यह मदद की, शुभकामनाएं –

+2

कोडिंसिटी से उदाहरण FluentValidation की तरह दिखता है :) – dariol

4

मैं एक ही समस्या थी (विशेष रूप से के लिए ValidationResult और ValidationError वर्ग)। मैं विशिष्टता के लिए सत्यापन सजावट बनाते हैं (कोड जावा है)।

interface Validator<T>{ 
    Respond validate(T t) 
    } 


    class abstract ValidationSpecificationDecorator<T> implements Validator<T> { 
    Specification<T> spec; 

    ValidationSpecificationDecorator(Specification<T> spec){ 
    this.spec = spec; 
    } 

    public Respond validate(T t) { 
    Respond respond = new Respond(); 
    if(!spec.IsSatisfiedBy(t){ 
     respond.add(error(t)); 
    } 
    return respond; 
) 

    public abstract Error error(T t); 

    } 
संबंधित मुद्दे