2010-07-05 8 views
8

मुझे वेब सेवा से डेटा को यूआई में प्राप्त करने का सबसे अच्छा तरीका तय करने में कुछ परेशानी हो रही है।विंडोज फोन 7 के लिए एक एमवीवीएम ऐप में एक आरईएसटी वेब सेवा उपभोग करने के लिए अच्छा आर्किटेक्चर?

वेब क्लाइंट की असीमित प्रकृति को देखते हुए आप इसे कैसे बनाएंगे?

  • मॉडल वेब सेवा करने के लिए बात करने के लिए WebClient का उपयोग करता
  • ViewModel पूछता डेटा
  • देखें Async पूरा घटना पर ViewModel

को databound है के लिए मॉडल मैं से बाहर वापस है कि डेटा प्राप्त करने की आवश्यकता ViewModel के लिए मॉडल, ये वे चीजें हैं जिनके बारे में मैंने सोचा है।

  1. मैं मॉडल में एक ईवेंट को आग लगा सकता हूं जो ViewModel की सदस्यता लेता है।
  2. मैं शायद कॉलबैक के आसपास गुज़रने के साथ कुछ कर सकता था?
  3. या मुझे ViewModel और मॉडल के बीच INotifyPropertyChanged ईवेंट का दूसरा स्तर करना चाहिए?
  4. या क्या मैं बहुत उलझन में हूं और एमवीवीएम को पूरी तरह गलत समझ रहा हूं?

उत्तर

4

यह कैसे शुद्धतावादी आप MVVM के बारे में होना चाहते हैं पर निर्भर करता है।

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

या आपके पास एक स्थानीय मॉडल हो सकता है जिसमें वेब क्लाइंट कोड है (जैसा कि यह आपके जैसा लगता है)। इस मामले में, मेरे व्यक्तिगत दृष्टिकोण में "मॉडल अपडेटेड" ईवेंट होगा जो Async पूर्ण ईवेंट से आग लगती है। (आपका विकल्प 1)।

आपका ViewModel या तो एक PropertyChanged(null) आग देखें सभी गुण के लिए पूछने के लिए या आग कई PropertyChanged घटनाओं इस घटना के लिए सुन सकते हैं, और,। याद रखें कि आप अपने सेटर्स के भीतर से PropertyChanged को फायर करने के लिए प्रतिबंधित नहीं हैं। वहाँ एक विधि होने से आप को रोकने की तरह

private void FireMultipleProperties(){ 
NotifyPropertyChanged("Property1"); 
NotifyPropertyChanged("Property2"); 
NotifyPropertyChanged("Property3"); 
} 

तो तुम उस विधि कह सकते हैं जब मॉडल को आबाद करने खत्म कुछ भी नहीं है, और अपने यूआई प्रत्येक प्रॉपर्टी अद्यतन कॉल करेंगे जब वे निकाल दिया जाता है। आपको केवल यह करने की आवश्यकता होगी यदि आपके पास गुणों का एक टन है और PropertyChanged(null) के साथ उन्हें एक बार में आग लगाना नहीं चाहते हैं।

+0

धन्यवाद बेन:

जब से तुम बाकी आधारित वेब सेवाओं का उल्लेख है, मैं एक जीत Phone 7 एप्लिकेशन के लिए एक सेवा परत के रूप में MVC 2 JSON परिणाम उपयोग का एक उदाहरण ब्लॉग पोस्ट की है। मुझे लगता है कि मैं स्थानीय मॉडल रखना चाहता हूं क्योंकि उन्हें कई व्यूमोडल्स में इस्तेमाल किया जाएगा। मुझे PropertyChanged (शून्य) के बारे में पता नहीं था, यह बहुत अच्छा है। – Will

1

मुझे लगता है कि आपको अपने आर्किटेक्चर में एक नई परत पेश करने की आवश्यकता है; एक सेवा परत। आम तौर पर, मैं अपने व्यूमोडेल में अपनी प्रासंगिक सेवाओं में जाता हूं और व्यूमोडेल एसिंक कॉल का संचालन करता है और व्यस्त राज्यों और सभी मजेदार सामान दिखाता है।

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

  • ProductListService रिटर्न उत्पाद (मॉडल) सूची
  • ProductListViewModel ProductListService का उपयोग करता है उत्पाद
  • ProductListView ProductListViewModel में productlist ObservableCollection को बांधता है पाने के लिए।

यह पैटर्न अनिवार्य रूप से मॉडल-व्यू-कंट्रोलर जैसा दिखता है, जहां व्यूमोडेल अधिक नियंत्रक जिम्मेदारियां लेता है। Data Driven Win Phone 7 Apps with MVC 2 JSON services

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