2010-01-06 15 views
5

मैं हाल ही में एमवीवीएम में देख रहा हूं और मुझे समग्र विचार मिल रहा है। यद्यपि कुछ निगल बिट्स हैं हालांकि मैं पूरी तरह से समझ नहीं पा रहा हूं और यहां कुछ जवाब पाने के लिए चिल्ला रहा था, चीयर्स!कुछ एमवीवीएम प्रश्न (डब्ल्यूपीएफ सी #)

  1. क्या पूरे एप्लिकेशन के लिए एक डेटा मॉडल का उपयोग करना गलत है। आम तौर पर यदि मैं एक छोटी उपयोगिता बना रहा हूं तो मेरे पास एक वर्ग में सभी तार्किक डेटा होंगे। इसका मतलब यह है कि मैं की तरह somethings हो सकता है निम्नलिखित:

    DataStore myData = new DataStore; 
    
  2. यदि यह एक डाटा मॉडल यह ठीक एक से अधिक मॉडल दृश्य है करने के लिए है करने के लिए ठीक है, का कहना है कि एक-एक खिड़की या दृश्य (यह मैं कैसे है का प्रतिनिधित्व एमवीवीएम काम कर रहा है कल्पना)।

  3. ऊपर दिए गए यदि ऊपर एक मॉडल के कई दृश्य हैं तो ऐसा लगता है कि मॉडल को पहली विंडो (देखें) से पहले घोषित किया जाना चाहिए, इसे कहां घोषित किया जाना चाहिए? मॉडल को बाद के मॉडल विचारों के संदर्भ के माध्यम से पारित किया जाना चाहिए? क्या यह युग्मन का स्रोत नहीं होगा क्योंकि खिड़की या पृष्ठ (दृश्य) को मॉडल मॉडल के बारे में जानने के लिए मॉडल के बारे में जानना होगा क्योंकि दृश्य मॉडल दृश्य को तुरंत चालू करता है।

क्षमा करता है, तो इस सवाल का एक बहुत है, मैं एक एकल खिड़की या पेज अर्थ में MVVM का अंदाजा हो लेकिन एक बार मैं कई दृश्य जोड़ अपने सिस्टम टूट जाती है। मैं इसे अपने डेटा को पकड़ने के लिए बाहरी स्रोत तक पहुंचने वाले अलग-अलग मॉडल के साथ काम करने के लिए प्राप्त कर सकता हूं, लेकिन यदि डेटा को दृश्यों के बीच जारी रखने की आवश्यकता है तो मैं खो जाता हूं।

उन सभी को धन्यवाद जो प्रतिक्रिया देने का समय लेते हैं!

+0

मैं जोड़ना चाहता हूं।यदि मॉडल विभिन्न मॉडलों के बीच डेटा को बनाए रखने की आवश्यकता है तो क्या मॉडल को बाहरी स्रोत पर डेटा भेजना चाहिए? क्या मॉडल केवल स्टोरेज और मॉडल व्यू के बीच डेटा ले जा रहा है? – deanvmc

उत्तर

5

कुछ विचार:

  1. सरल अनुप्रयोगों जरूरी MVVM की जटिलता की आवश्यकता नहीं है - और अंतर्निहित मॉडल सीधे का उपयोग कर - आप ViewModel को नष्ट करने के साथ भाग प्राप्त करने में सक्षम हो सकता है। बस सावधान रहें कि आप इस दृष्टिकोण को ब्रेकिंग पॉइंट पर नहीं बढ़ाते हैं - क्योंकि डब्लूपीएफ इनोटिफ़ाईप्रॉपर्टी चेंज, और निर्भरता प्रॉपर्टीज जैसी चीज़ों पर बहुत निर्भर है। आप इन्हें अपने मॉडल वर्गों में अनावश्यक रूप से विलय करना शुरू नहीं करना चाहते हैं।

  2. हाँ, यह ठीक है। हालांकि, ... ध्यान रखें कि केवल एक मॉडल उदाहरण होने पर यह आसान है - अन्यथा आपको सहेजने के लिए कई दृश्यों में परिवर्तन विलय करने की आवश्यकता है (या एक संस्करण के परिवर्तनों को खोना)। यदि व्यूमोडल्स एक ही अंतर्निहित मॉडल का संदर्भ लेता है तो यह काम करने योग्य हो सकता है।

  3. आप एमवीवीएम में युग्मन के एक निश्चित स्तर से नहीं बच सकते हैं। हालांकि, (यदि मैं आपके प्रश्न को सही ढंग से समझता हूं) मॉडलव्यू के बीच युग्मन शुरू करना संभवतः एक बुरा विचार है - क्योंकि यह किसी विशेष दृश्य के लिए अनुकूलित मॉडल पर एक अलग परिप्रेक्ष्य बनाने के उद्देश्य को हरा रहा है।

+1

बिल्कुल सहमत हैं: डेटा बाइंडिंग आर्किटेक्चर के लाभों में से एक यह है कि आप सरलीकृत मॉडल-व्यू आर्किटेक्चर में काम कर सकते हैं और केवल जब आप अपने विचारों की मांग करना शुरू करते हैं तो अधिक जटिल एमवीवीएम दृष्टिकोण तक पहुंच सकते हैं। और मैं उस सरल वास्तुकला का समर्थन करने के लिए आपके मॉडल वर्गों पर बदलकर INotifyProperty को लागू करने से दूर नहीं जाऊंगा (हालांकि मैं एक बार जब आप डीपी को पहिया करने की आवश्यकता शुरू करते हैं तो आप सहमत हैं कि आप मॉडल क्षेत्र में देख रहे हैं)। – itowlson

+0

हाँ आप सही ढंग से समझ गए हैं। मैं समझता हूं कि मैं प्रक्रिया को छोटा करने से दूर हो सकता हूं लेकिन मैं बड़ी ऐप्स लेने से पहले (निराशाजनक रूप से मैं जोड़ सकता हूं) एमवीवीएम सीखने की कोशिश कर रहा हूं। ऐसा लगता है कि मेरी समग्र समस्या मॉडल के बीच डेटा जारी है। हो सकता है कि मेरे पास एक मॉडल गलत है, मैं इसे प्रतिबिंबित करने के लिए अपनी पोस्ट संपादित करूंगा। – deanvmc

+1

आपको लगातार डेटा के प्रबंधन के लिए एमवी के जिम्मेदार होने से बचना चाहिए। उन्हें तत्काल (या स्पष्ट रूप से परिभाषित बिंदुओं पर) अंतर्निहित मॉडल कक्षाओं में उनके परिवर्तनों को मर्ज करना चाहिए। यह विभिन्न विचारों के बीच दृढ़ता से निपटने के साथ निपटने से बचाता है। – LBushkin

1

मेरा अपना अनुभव:

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

  2. मैं व्यक्तिगत रूप से अपने प्रत्येक दृश्य के लिए मॉडलव्यू का उपयोग करना पसंद करता हूं। मुझे लगता है कि इस पर अलग-अलग तर्क हैं, लेकिन मुझे व्यक्तिगत रूप से लगता है कि यह सब कुछ मॉड्यूलर और यूनिट टेस्टेबल रहता है।

  3. मैं मॉडल व्यू के बीच युग्मन से बचने की कोशिश करता हूं। अगर मेरे प्रत्येक दृश्य के लिए मॉडलव्यू है तो मैं प्रत्येक मॉडल व्यू को प्रत्येक दृश्य में अलग से घोषित करता हूं। मैं फिर घटनाओं के माध्यम से अपने मुख्य दृश्य में प्रत्येक दृश्य को तुरंत चालू करता हूं। यह एमवीवीएम पैटर्न के साथ रहता है, और आप अलग-अलग मॉडल दृश्यों में से प्रत्येक को यूनिट टेस्ट कर सकते हैं।

मैं हैरान करता है, तो आप पहले से ही इस लेख को पढ़ लिया है नहीं होगा, लेकिन उन वहाँ MVVM डिजाइन के बारे में जानने के लिए इच्छुक के लिए यहाँ एक अच्छा Link है।

+0

पवित्र गाय जो एक घना लेख है, मैं इसमें सबकुछ समझने का नाटक करता हूं लेकिन कम से कम यह मुझे सीखने के लिए चीजों की सूची देता है! धन्यवाद! – deanvmc

1

क्या पूरे एप्लिकेशन के लिए एक डेटा मॉडल का उपयोग करना गलत है। आमतौर पर यदि मैं एक छोटी उपयोगिता बना रहा हूं, तो मेरे पास एक वर्ग में तार्किक डेटा होगा। यह का मतलब है मैं निम्नलिखित तरह somethings हो सकता है:

`DataStore myData = new DataStore; ` 

यह ठीक है। आपका डाटा मॉडल अपने डेटा मॉडल है और संभव सबसे अच्छा तरीका में डेटा का प्रतिनिधित्व करना चाहिए, एक वर्ग या 1000.

अगर यह ठीक है में यह हो एक डाटा मॉडल यह ठीक एक से अधिक है के लिए मॉडल देखें, प्रत्येक विंडो या दृश्य का प्रतिनिधित्व करने वाला एक कहें (इस प्रकार मैं एमवीवीएम काम कर रहा हूं)।

बिल्कुल, मेरी राय में यह वही है जो आपको करना चाहिए। आम तौर पर मैं कहूंगा कि आप प्रति दृश्य एक दृश्य मॉडल चाहते हैं, चाहे कोई दृश्य नियंत्रण या खिड़की हो। ऐसे मामले हो सकते हैं जहां आप पाते हैं कि किसी विशेष दृश्य के लिए एक से अधिक दृश्य मॉडल उपयोगी होंगे, लेकिन मैं यह सुनिश्चित करने के लिए पहले देखता हूं कि मेरे पास कोई दृश्य नहीं था जिसे विभाजित किया जाना चाहिए।

तो ऊपर अगर एक से अधिक मॉडल दृश्य यह प्रतीत होता है कि मॉडल पहले खिड़की (देखें) से पहले घोषित करना होगा है, जहां यह घोषित किया जाना चाहिए देखते हुए? मॉडल को मॉडल दृश्यों के संदर्भ के माध्यम से पारित किया जाना चाहिए? यह खिड़की या पृष्ठ (दृश्य) के रूप में युग्मन के स्रोत के बारे में मॉडल को अपने मॉडल दृश्य पर पास करने के लिए मॉडल की आवश्यकता होगी क्योंकि दृश्य दृश्य को तुरंत चालू करता है।

अब आप धार्मिक क्षेत्र में प्रवेश कर रहे हैं। मैं इस पर थोड़ा सा पंसद करने जा रहा हूं और कहूंगा कि आपके आवेदन के लिए क्या समझ में आता है। उस ने कहा, यदि आप अपने मॉडल और अपने विचार/दृश्य मॉडल के बीच युग्मन को कम करना चाहते हैं, तो मैं आपके मॉडल वर्ग (एसएस) से एक इंटरफ़ेस निकालने की अत्यधिक अनुशंसा करता हूं। अपने मॉडल को अपनी App.xaml.cs फ़ाइल में बनाने के लिए काफी सरल होगा और फिर इसे इंटरफ़ेस के कार्यान्वयन के रूप में दृश्य (मॉडल) पर पास कर दें।

+0

@ आपके आखिरी बिंदु: मैंने सोचा कि जैसा कि एमवीवीएम का कम से कम उत्तर भाग लगता है, अधिकांश उदाहरण एकल उपयोग उदाहरण दिखाते हैं लेकिन मुझे अभी तक मॉडल के माध्यम से दृढ़ता का ठोस उदाहरण नहीं दिख रहा है। धन्यवाद मैं आपके सुझावों के साथ tinker होगा! – deanvmc

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