मैं कुछ MVVM लेखों से गुजर रहा हूं, मुख्य रूप से यह और यह ।
मेरा विशिष्ट प्रश्न यह है: मैं मॉडल से ViewModel में मॉडल परिवर्तन कैसे संवाद करूं?
जोश के लेख में, मैं नहीं देखता कि वह ऐसा करता है। ViewModel हमेशा गुणों के लिए मॉडल पूछता है। राहेल के उदाहरण में, वह मॉडल लागू करती है INotifyPropertyChanged
, और मॉडल से घटनाओं को उठाती है, लेकिन वे स्वयं दृश्य द्वारा उपभोग के लिए हैं (वह ऐसा क्यों करता है, इस बारे में अधिक विवरण के लिए उसका लेख / कोड देखें)।
कहीं भी मुझे ऐसे उदाहरण नहीं दिखाई देते हैं, जहाँ मॉडल मॉडल गुणों के परिवर्तनों के ViewModel को सचेत करता है। इसने मुझे चिंतित कर दिया है कि शायद यह किसी कारण से नहीं हुआ है। क्या मॉडल में परिवर्तनों के ViewModel को सचेत करने के लिए एक पैटर्न है? ऐसा लगता है कि आवश्यक है (1) बोधगम्य रूप से प्रत्येक मॉडल के लिए 1 से अधिक ViewModel हैं, और (2) भले ही सिर्फ एक ViewModel है, मॉडल पर कुछ कार्रवाई के परिणामस्वरूप अन्य गुण बदले जा सकते हैं।
मुझे संदेह है कि फॉर्म के उत्तर / टिप्पणियां हो सकती हैं "आप ऐसा क्यों करना चाहेंगे?" टिप्पणियाँ, तो यहाँ मेरे कार्यक्रम का वर्णन है। मैं MVVM के लिए नया हूँ इसलिए शायद मेरा पूरा डिज़ाइन दोषपूर्ण है। मैं संक्षेप में इसका वर्णन करूँगा।
मैं कुछ ऐसा प्रोग्रामिंग कर रहा हूं जो "ग्राहक" या "उत्पाद" कक्षाओं की तुलना में अधिक दिलचस्प है (कम से कम, मेरे लिए!)। मैं ब्लैकजैक प्रोग्रामिंग कर रहा हूं।
मेरे पास एक ऐसा दृश्य है जिसमें कोई कोड पीछे नहीं है और बस ViewModel में संपत्तियों और आदेशों पर निर्भर करता है (जोश स्मिथ के लेख देखें)।
बेहतर या बदतर के लिए, मैं दृष्टिकोण है कि मॉडल जैसे ही नहीं, वर्गों को शामिल करना चाहिए ले लिया PlayingCard
, Deck
, लेकिन यह भी BlackJackGame
वर्ग है कि पूरे खेल की स्थिति रहती है और जानता है कि जब खिलाड़ी चला बस्ट है, डीलर कार्ड आकर्षित करने के लिए है, और खिलाड़ी और डीलर वर्तमान स्कोर क्या है (21, 21, बस्ट, आदि से कम)।
से BlackJackGame
मैं "drawcard" की तरह के तरीकों का पर्दाफाश और यह मेरे लिए हुआ है कि एक कार्ड तैयार हो जाती है, जैसे गुण CardScore
, और IsBust
अद्यतन किया जाना चाहिए और इन नए मूल्यों ViewModel को नहीं भेजी। शायद यह दोषपूर्ण सोच है?
एक दृष्टिकोण ले सकता है कि ViewModel ने DrawCard()
विधि को बुलाया ताकि उसे अपडेट किए गए स्कोर के लिए पूछना चाहिए और पता लगाना चाहिए कि वह बस्ट है या नहीं। राय?
मेरे ViewModel में, मेरे पास प्लेइंग कार्ड (सूट, रैंक) के आधार पर वास्तविक छवि को हथियाने और इसे दृश्य के लिए उपलब्ध कराने का तर्क है। मॉडल को इससे चिंतित नहीं होना चाहिए (शायद अन्य ViewModel कार्ड छवियों को खेलने के बजाय केवल संख्याओं का उपयोग करेगा)। बेशक, शायद कुछ मुझे बताएंगे कि मॉडल को ब्लैकजैक गेम की अवधारणा भी नहीं होनी चाहिए और इसे व्यूमॉडल में संभाला जाना चाहिए?
OnBust
, और वीएम इसे सदस्यता ले सकता है। मुझे लगता है कि आप भी IEA दृष्टिकोण का उपयोग कर सकते हैं।