5

मैं asp.net MVC के 3 और DDD के साथ एक वेब अनुप्रयोग विकसित कर रहा हूँ। मेरे डोमेन मॉडल सत्यापन के लिए, मैं फ्लुएंट सत्यापन का उपयोग कर रहा हूं। यह मेरी पहली परियोजना है जो धाराप्रवाह सत्यापन के साथ है और मैं अभी भी संस्थाओं को सीख रहा हूं और मॉडलिंग कर रहा हूं।Fluent सत्यापन और आईओसी (अद्वितीय फील्ड)

मेरे इकाई ग्राहक दो गुण अपने सिस्टम में अद्वितीय होने की जरूरत है कि, इन गुणों ईमेल और सीपीएफ (यह एक Brasilian दस्तावेज़ है और सभी सिस्टम में अद्वितीय होने चाहिए) कर रहे हैं है। मैं जानना चाहता हूं, मैं इसे कैसे कर सकता हूं?

सू, मेरे ideia, (निर्माता द्वारा) ग्राहकों की मेरी मान्यता कक्षा में इंजेक्षन है मेरी भंडार और एक कस्टम मान्यता द्वारा यह जाँच करें। प्रमाणीकरण का उपयोग करके भंडार का उपयोग किया जाएगा यदि इस ईमेल के साथ एक आईडी के अलग-अलग आईडी (0 प्रविष्टियों के लिए 0 और अपडेट के लिए वास्तविक आईडी के लिए मेरी तालिका में रिकॉर्ड है ... मुझे रिकॉर्ड रिकॉर्ड करने की आवश्यकता नहीं है क्योंकि यह ' हमेशा सच हो)।

मैं `कुछ इस तरह की कोशिश कर रहा:

public class CustomerValidator : AbstractValidator<Customer> { 

    protected ICustomerRepository Repository { get; set; } 

    // I intend to inject it by IoC with Unity.. is it possible ? 
    public CustomerValidator(ICustomerRepository rep) 
    { 
     this.Repository = rep; 

     // other properties 

     RuleFor(customer = customer.Email) 
      .EmailAddress() 
      .NotEmpty() 
      .Must(email = { return Repository.IsEmailInUse(email, ?); }); 

     RuleFor(customer = customer.CPF) 
      .NotEmpty() 
      .Must(cpf = { return Repository.IsCPFInUse(cpf, ?); }); 

    } } 

मैं यदि संभव हो तो है पता नहीं है, सत्यापनकर्ता अंदर भंडार इंजेक्षन, और मैं .Must विधि विस्तार में ईद कैसे मिल सकती है? या ऐसा करने के लिए कोई और तरीका है?

उत्तर

9
RuleFor(customer => customer.Email) 
    .EmailAddress() 
    .NotEmpty() 
    .Must((customer, email) => Repository.IsEmailInUse(email, customer.Id)); 

RuleFor(customer => customer.CPF) 
    .NotEmpty() 
    .Must((customer, cpf) => Repository.IsCPFInUse(cpf, customer.Id)); 

यह कहा जा रहा है, विशिष्टता के लिए जाँच भी अधिक कुशलता से सिस्टम में ही (डेटाबेस?) जैसे ही आप रिकॉर्ड सम्मिलित और उचित अपवाद को पकड़ने के लिए सत्यापन में ऐसा करने की कोशिश कर के बजाय कर रहे हैं पर से किया जा सकता है परत। इसका कारण यह है कि उस समय के बीच जब आपके फ़्लुएंट वैलिडेशन ने विशिष्टता के लिए जांच की थी और वास्तविक समय में एक रिकॉर्ड डाला गया था, तो कई चीजें हो सकती हैं।

+0

अपने awser डैरिन, लेकिन अपनी टिप्पणी के लिए धन्यवाद मुझ में एक भ्रम की स्थिति पैदा। क्या यह सत्यापन किसी अन्य स्थान पर होना चाहिए? मेरे डेटाबेस में, मेरे पास कुछ अनूठी बाधाएं हैं जो इस सत्यापन को भी बनाती हैं, लेकिन अपवादों से बचने के लिए मुझे डोमेन मॉडल और यूआई द्वारा भी इसे रोकने की ज़रूरत है, क्या यह सही है? यह सत्यापन वर्ग मेरे डोमेन की क्लास लाइब्रेरी प्रोजेक्ट के भीतर है, क्या यह भी सही है? या मुझे एक सत्यापन परत करना चाहिए? मैं डीडीडी और अवधारणाओं के बारे में बहुत कुछ नहीं जानता, मैं सीखने की कोशिश कर रहा हूं ... धन्यवाद :) –

+0

अब यह काम कर रहा है आदमी! धन्यवाद! –

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