5

के साथ व्यूमोडेल पर निर्भरता प्रॉपर्टी का उपयोग करना मैं एक इकाई फ्रेमवर्क मॉडल के साथ एमवीवीएम पैटर्न का उपयोग कर सी # में डेस्कटॉप एप्लिकेशन लिख रहा हूं। मैं अपने वीएम में निर्भरता प्रॉपर्टीज का उपयोग करता हूं और (आमतौर पर) इस प्रणाली को INotifyPropertyChanged को लागू करने के लिए पसंद करता हूं। मैं चीजों को सुसंगत रखना चाहता हूं। मेरा वीएम मॉडल में इकाइयों तक पहुंचता है और मैंने चीजों को काफी अलग रखने में कामयाब रहा है - दृश्य को बाध्यकारी और कमांड नामों को छोड़कर वीएम का कोई ज्ञान नहीं है और मॉडल को वीएम के बारे में पता है।एंटिटी फ्रेमवर्क

वीएम में INotifyPropertyChanged का उपयोग करना, यह मॉडल की इकाइयां अद्यतन करने के लिए बहुत आसान लगता है:

public string Forename 
    { 
     get { return CurrentPerson.Forename; } 
     set 
     { 
      if (Forename != value) 
      { 
       CurrentPerson.Forename = value; 
       NotifyPropertyChanged("Forename"); 
      } 
     } 
    } 

... जहां CurrentPerson इकाई डेटा मॉडल से एक व्यक्ति वस्तु स्वतः निर्मित है। इसलिए फोरनाम स्टोर करने के लिए विशेष रूप से कोई निजी क्षेत्र नहीं बनाया गया है।

निर्भरता प्रॉपर्टीज के साथ, ऐसा लगता है कि मुझे एक डीपी बनाना होगा, GetValue और Setvalue का उपयोग करके डिफ़ॉल्ट संपत्ति जोड़ें, और CurrentPangedCallback का उपयोग CurrentPerson Entity को अपडेट करने के लिए करें। इस स्थिति में कॉलबैक को कॉल करना मेरे अन्य वीएम के अनुरूप होने के लिए ओवरहेड जोड़ रहा है।

सवाल यह है कि क्या इनमें से एक या अन्य तरीकों से मैं चीजें कर सकता हूं? इस उदाहरण में, क्या मुझे निर्भरता प्रॉपर्टी या INotifyPropertyChanged का उपयोग करना चाहिए? एक बात जो इंगित की जानी चाहिए कि यह संभावित रूप से एक बहुत बड़े पैमाने पर प्रोजेक्ट (प्लगइन के साथ और विभिन्न मशीनों से बहुत सारे डेटाबेस तक पहुंच) के साथ होगा और यह कि सबकुछ वास्तव में पुन: प्रयोज्य होना चाहिए, और मॉड्यूल को "डिस्कनेक्ट" के रूप में यथासंभव होना चाहिए ।

+0

दृश्य मॉडल में निर्भरता गुण का उपयोग करने का क्या लाभ है? दूसरे शब्दों में - यह कितना अतिरिक्त मूल्य लाता है कि 'INotifyPropertyChanged' ऑफर नहीं करता है। –

+0

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

उत्तर

2

मैं निर्भरता प्रॉपर्टी के बजाय INotifyPropertyChanged का उपयोग करने की अनुशंसा करता हूं। ViewModels में निर्भरता प्रॉपर्टी से दूर रहने का मुख्य कारण यह है क्योंकि निर्भरताप्रॉपर्टी WindowsBase.dll में स्थित है। यह आपको विंडोज यूआई से थोड़ा अधिक (कम से कम IMHO) से जोड़ता है।

INotifyPropertyChanged का उपयोग करना बनाए रखना बहुत आसान है क्योंकि यह विभिन्न प्लगइन्स को जिस तरह से लागू करना है उसे लागू करने की अनुमति देता है। यदि आप निर्भरता गुणों को मजबूर करते हैं, तो सभी व्यूमोडेल को निर्भरता ऑब्जेक्ट से प्राप्त करने की आवश्यकता होती है।

INotifyPropertyChanged और DependencyProperty के उपयोग के बारे में अधिक जानकारी के लिए इस लेख देखें: http://kentb.blogspot.com/2009/03/view-models-pocos-versus.html

एक और समर्थन जवाब: https://stackoverflow.com/a/783154/27669

+0

धन्यवाद। मुझे लगता है कि INotifyPropertyChanged जाने का रास्ता होगा, हालांकि INOTifyPropertyChanged में "मैजिक स्ट्रिंग्स" का उपयोग करने के लिए विभिन्न सुरक्षा उपायों के साथ ईवेंट, मुझे अभी भी डीपी और अधिक सुरुचिपूर्ण लगता है। इस दृष्टिकोण पर आने वाले दो मुख्य कारण ये हैं: 1) डीपी के साथ राज्य डुप्लिकेशंस और 2) तथ्य यह है कि मुझे कभी-कभी पूरे ऑब्जेक्ट स्टेटस को बदलने की ज़रूरत होती है, और मैं इसे PropertyChanged (शून्य) के साथ कर सकता हूं। उत्तर और संदर्भ के लिए धन्यवाद। –

+0

विंडोज यूआई के साथ युग्मन एक प्रमुख मुद्दा हो सकता है .. बस एक परियोजना तय की गई जहां एक ही डीएलएस का इस्तेमाल वेब सेवा के लिए किया गया था लेकिन निर्भरता संपत्ति ने जोर दिया कि यह यूआई थ्रेड पर चलता है जो एक बहुप्रचारित वेब सेवा में मुश्किल है।यह वास्तुशिल्प लचीलापन (यानी आपके एंटिटी डीएलएस में विंडोज जीयूआई के लिए तंग युग्मन की कमी) जीयूआई के लिए लालित्य से कहीं अधिक महत्वपूर्ण है। – user1496062

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