2012-11-23 19 views
9

मैं एक ऐसा एप्लिकेशन बना रहा हूं जो उपयोगकर्ता को दर्ज किए गए डेटा को सम्मिलित, अद्यतन और हटाए और फिर डेटा-ग्रिड (सीआरयूडी ऑपरेशंस) में दिखाया गया हो।क्या एमवीवीएम लागू करने का यह सही तरीका है?

मेरे व्यू मॉडल में, इसमें गुण हैं जो xaml (उदाहरण के लिए Firstname) से बंधे हैं। इसमें एक नेविगेशन संपत्ति के साथ ही सत्यापन गुण भी शामिल हैं।

 [Required(ErrorMessage = "First Name is a required field")] 
     [RegularExpression(@"^[a-zA-Z''-'\s]{1,20}$", ErrorMessage = "First Name must  contain no more then 20 characters and contain no digits.")] 
     public string FirstName 
     { 
     get { return _FirstName; } 
     set 
     { 
      if (_FirstName == value) 
       return; 

      _FirstName = value; 
      OnPropertyChanged("FirstName"); 
     } 
    } 

इसके अलावा, यह निष्पादित करने के लिए xaml, जो CRUD आपरेशन का एक उदाहरण बनाता है के लिए आदेशों होता है;

private void UpdateFormExecute() 
    { 
     var org = new OrganisationTypeDetail(); 
     UpdateOrganisationTypeDetail(org); 
    } 

और आखिरकार, इसमें सीआरयूडी संचालन भी शामिल है। जैसे सम्मिलित करें, अपडेट करें और हटाएं।

जो मुझे मेरे प्रश्न पर ले जाता है। अगर मैं सही एमवीवीएम तरीके को कार्यान्वित करना चाहता हूं, तो यह मॉडल कोड मॉडल के लिए बहुत अधिक है?

क्या मुझे मॉडल का उपयोग करना चाहिए और मेरे व्यू-मॉडल के भीतर एक संग्रह बनाना चाहिए और मेरे xaml पर बाध्य होना चाहिए? क्या यह करने का सही तरीका होगा?

क्या मुझे सीआरयूडी परिचालनों के लिए एक रिपोजिटरी सिस्टम का उपयोग करना चाहिए? यदि हां, तो मैं अद्यतन फ़ील्ड के माध्यम से टेक्स्ट फ़ील्ड से डेटा को मॉडल में कैसे पास करूं?

मैं WPF, MVVM के लिए नया हूं और उचित मार्गदर्शन के बिना इसे अनुकूलित करना मुश्किल लगता हूं।

उत्तर

3

मैं कहूँगा कि इस है MVVM लागू करने के लिए एक सही तरीका है, लेकिन नहीं MVVM लागू करने के लिए सही तरीका।

मेरा मतलब यह है कि इस पैटर्न को लागू करने के लिए एक सही तरीका नहीं है। अगर आपने व्यूमोडेल बनाया है जो आपके व्यू के लिए बाध्य हो सकता है, आपके व्यू के भीतर कोई अतिरिक्त तर्क नहीं है (यानी कोड-बैक) तो आपने एमवीवीएम का सार हासिल कर लिया है।

चाहे आप अपने कोड में अधिक पैटर्न और संरचना जोड़ते हैं या नहीं, पूरी तरह से आपके ऊपर है। यदि यह एक साधारण एप्लीकेशन है, तो मैं पैटर्न को हल्का रखूंगा। आगे बढ़ें और अपनी व्यू मॉडेल टॉक को सीधे भंडार के साथ रखें। आप वर्तमान कोड उस सम्मान में मेरे लिए ठीक लग रहे हैं।

यदि यह एक बड़ा एप्लीकेशन है, तो आप एक सेवा परत, डेटा एक्सेस परत की तरह आगे परतों को जोड़ना चाहेंगे। आप निर्भरता इंजेक्शन के बारे में सोचना चाह सकते हैं।

लेकिन न केवल पैटर्न को अपनाना, या एक अतिरिक्त परत जोड़ें क्योंकि आपको लगता है कि आपको चाहिए। निर्भरता इंजेक्शन अच्छा लगता है, लेकिन कई मामलों में यह लायक है की तुलना में अधिक परेशानी है!

+0

मेरे लिए चीजों को साफ़ करने के लिए धन्यवाद, भ्रम इस तथ्य के कारण है कि कई अलग-अलग तरीके हैं, मुझे नहीं पता कि किसके पालन करना है! इसके अलावा, "निर्भरता इंजेक्शन" से आपका क्या मतलब है? –

+0

http://en.wikipedia.org/wiki/Dependency_injection – ColinE

0

मेरे लिए यह सही तरीका नहीं है, मुझे लगता है कि फर्स्टनाम जैसे गुणों को परिभाषित करना मॉडल में अच्छा विचार नहीं है। दृश्य में केवल मॉडल होना चाहिए और आपका दृश्य मॉडल मॉडल को लपेटना चाहिए जिसे XAML (यदि आवश्यक हो) तक सीमित किया जाना चाहिए।

मॉडल ऑब्जेक्ट निर्माण भी मॉडल मॉडल से पूरी तरह से स्वतंत्र होना चाहिए। मॉडल को मॉडल पर केवल यूनिट ऑपरेशंस के बारे में पता होना चाहिए और सत्यापन मॉडल के अंदर होना चाहिए उदाहरण के लिए आपके मामले में फर्स्टनाम मान्यताओं ViewModel में हैं मतलब है कि आप केवल प्रथम नाम संपत्ति को सत्यापित करने के लिए जीयूआई को सीमित कर रहे हैं, लेकिन अगर कोई इसे अन्य स्थान से सेट करता है तो क्या होगा।

+0

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

+1

क्या आप वर्णन कर सकते हैं कि यह एक अच्छा विचार क्यों नहीं है? और क्यों यह 'सही' एमवीवीएम नहीं है? इस बारे में नियमों का पालन करें कि आपको पैटर्न को कैसे कार्यान्वित करना चाहिए, उतना ही खराब है जितना पैटर्न का उपयोग नहीं करना! – ColinE

+0

@coline क्योंकि समझाया गया उदाहरण में, फर्स्टनाम एक मॉडल की प्रॉपर्टी प्रतीत होता है जो मुझे लगता है कि मॉडल में होना चाहिए मॉडल में नहीं। –

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