2010-04-28 12 views
8

[अस्वीकरण: मैं ASP.NET MVC डेवलपर हूँ]सिल्वरलाइट 4 WCF रिया सेवाएं और MVVM के रूप में सरल नहीं है

हाय,

मैं MVVM पैटर्न को लागू करने के साथ कुछ सर्वोत्तम प्रथाओं के लिए देख रहा हूँ सिल्वरलाइट में डब्ल्यूसीएफ आरआईए के साथ 4.

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

मैं प्रिज्म या एमवीवीएम लाइट टूलकिट जैसी अन्य सामग्री का उपयोग नहीं करना चाहता हूं। मुझे इंटरनेट पर कई उदाहरण मिलते हैं जो दिखाते हैं कि दृश्य पर डेटास्रोत खींचना और छोड़ना कितना अद्भुत है और काम पूरा हो गया है (यह मुझे मेरे पहले वीबी 6 विकास के बारे में याद दिलाता है)।

मैंने डब्ल्यूसीएफ आरआईए के साथ एमवीवीएम को लागू करने की कोशिश की और यह बिल्कुल भी स्पष्ट नहीं है। अगर मैं समझता हूं, एमवीवीएम में अलगाव में यूनिट परीक्षण करने के लिए सभी तर्क शामिल होना चाहिए, लेकिन जब इसे डब्ल्यूसीएफ आरआईए के साथ गठबंधन करने की बात आती है तो यह एक और कहानी है। मेरे पास निम्नलिखित प्रश्न हैं।

  1. क्या मैं मॉडल के रूप में जेनरेट किए गए मेटाडेटा का उपयोग कर सकता हूं? इसका उपयोग करना आसान होगा कि अगर मैं स्क्रैच से सभी लिखता हूं।

  2. जैसा कि मैंने देखा कि डेटा को डोमेनकॉन्टेक्स्ट के माध्यम से या दृश्य में सीधे बाध्यकारी (स्थानीय संसाधन) के माध्यम से डेटा प्राप्त हो सकता है। मैं दृश्य में सीधे बाध्यकारी नहीं चाहता, बिल्कुल टेस्टेबल नहीं। दूसरी ओर मैं DomainContext का उपयोग नहीं कर सकता, यह किसी एकल इकाई का पर्दाफाश नहीं करता !!! मेरे पास एंटीटीसेट है जो मैं डाटाग्रिड से बांध सकता हूं। मैं ViewModel से डेटाफॉर्म में एक इकाई को कैसे बांधूं?

  3. मैं मॉडल को डेटाबेस में कैसे उतार सकता हूं?

  4. मैं एक इकाई से इसकी वस्तुओं के संग्रह में कैसे जा सकता हूं। उदाहरण के लिए यदि मेरे पास कंपनी एंटिटी है तो मैं एक इकाई सूचनाओं को अद्यतन करने के लिए डेटाफॉर्म और कंपनियों के पते को दिखाने के लिए डेटाग्रिड दिखाना चाहता हूं। एक फॉर्म को सहेजते समय, मैं कंपनी को एक जानकारी और एक जानकारी को सहेजना चाहूंगा कि किस पते को सक्रिय के रूप में चुना गया था।

कृपया मुझे यह समझने में सहायता करें कि इसे कैसे किया जाए। या शायद मुझे डब्ल्यूसीएफ आरआईए छोड़ना चाहिए और इसे डब्ल्यूसीएफ के साथ स्क्रैच से करना चाहिए?

आपको क्या लगता है?

उत्तर

9

आपको इस session में रुचि हो सकती है। यह बताता है कि आरआईए डब्ल्यूसीएफ सेवाओं के साथ एमवीवीएम पैटर्न का उपयोग कैसे करें।

+0

निश्चित रूप से इस आलेख से नमूना 'बुकक्लब' कोड को देखने की अनुशंसा करेगा। –

4

कुछ यादृच्छिक जवाब ...

मुझे नहीं लगता कि MEF particuarly अच्छी तरह से Silverlight के लिए अनुकूल है है। यह मुख्य रूप से डेस्कटॉप ऐप्स के लिए है, और अन्य उपयोगों के लिए अनुकूलित किया जा सकता है जहां प्लग-इन ऐप के सापेक्ष स्थानीय फाइल सिस्टम में हैं।

एमवीवीएम की आवश्यकता है कि आप भूमिकाएं समझें। "व्यू" आपका एक्सएएमएल और कोड-बैक है। कोड-बैक को उपयोगकर्ता नियंत्रण से ईवेंट को संभालना चाहिए, लेकिन उससे बहुत कम।

व्यू मॉडेल उस डेटा को रखता है जिस पर उपयोगकर्ता नियंत्रण बाध्य होगा। आम तौर पर, व्यूमोडेल दृश्य को इसके डेटा कॉन्टेक्स्ट के रूप में बाध्य करता है, ताकि फॉर्म में सब कुछ व्यूमोडेल में गुणों के लिए डेटाबेस हो सके। ViewModel को INotifyPropertyChanged को कार्यान्वित करना होगा, और प्रत्येक संपत्ति के लिए प्रॉपर्टी बदलती घटनाओं को बढ़ाएं जो फॉर्म डेटाबेस के लिए है।

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

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

आरआईए सेवाएं प्रत्येक बिल्ड पर डोमेन कॉन्टेक्स्ट को पुन: उत्पन्न करेगी, जो इसे सिंक में रखने में थोड़ा मदद करती है। यह एक ओआरएम के ऊपर एक सेवा परत बनने का इरादा है, हालांकि, आपका ओआरएम या अन्य डेटा मैपिंग अभी भी अन्य माध्यमों द्वारा बनाए रखा जाना चाहिए।

मैंने आरआईए सेवाओं की अंतिम रिलीज को नहीं देखा है, लेकिन मैं बीटा संस्करण से काफी प्रभावित नहीं था। मैं सर्वर पर परिभाषित अच्छी इकाई वर्गों की बजाय, और सिल्वरलाइट परियोजना के साथ साझा करना चाहता हूं। हालांकि, स्थापित करना आसान नहीं है, और कुछ गैर-तुच्छ WCF की आवश्यकता है जो सेवा संदर्भों पर निर्भर नहीं है। (आरआईए सेवाओं की अंतिम रिलीज ने इनमें से कुछ को साफ कर लिया होगा, लेकिन सिल्वरलाइट में मूल डब्ल्यूसीएफ सेवा संदर्भ काफी बुरा है, मुख्य रूप से क्योंकि यह स्वचालित रूप से जेनरेट किए गए वर्गों को फिर से नहीं बनाता है, और यह सर्वर-साइड सेवा के लिए यूआरआई को हार्ड-कोड करता है ।)

मेटाडाटा आरआईए सेवा बीटा के साथ एक और समस्या थी। यदि आप इकाई स्रोत को नियंत्रित करते हैं, तो मेटाडेटा विशेषताओं को सीधे अपने डेटाकंट्रैक्ट क्लास और व्यक्तिगत डेटामेम्बर गुणों से जोड़ना आसान है। फिर, इसका मतलब आरआईए सेवाओं का उपयोग नहीं कर सकता है। आरआईए बीटा के लिए आवश्यक एक अलग मेटाडेटा वर्ग लिखना, एक अच्छा समाधान नहीं था।

मैंने सिल्वरलाइट 3 के लिए आरआईए सेवाओं का उपयोग नहीं किया, और इसे खेद नहीं हुआ। यहां एक excellent article on WCF and Silverlight है। हालांकि यह सिल्वरलाइट 2 कहता है, फिर भी यह किसी भी सिल्वरलाइट रिलीज के लिए लक्ष्य पर है।

मैं एमवीवीएम लाइट की सिफारिश करता हूं। यदि कोड एक मुद्दा है, तो कोड कोडप्लेक्स पर उपलब्ध है। यह मैसेजिंग और कमांडिंग समर्थन, साथ ही एक ViewModelLocator प्रदान करता है; जबकि बाद में समझने के लिए थोड़ा सा काम लगता है, यह मूल एमवीवीएम मॉडल के लिए वास्तव में एक अच्छा विस्तार है।

आशा इस मदद करता है .....

+0

से बहुत कुछ सीखा है एमवीवीएम और डब्ल्यूसीएफ आरआईए का उपयोग करके एक अच्छा चल रहा व्यवसाय ऐप्स नमूना भी है। इसे यहां देखें: http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/ –

2

बस सोचा था कि मैं आप एक परियोजना मैं पर काम कर रहा हूँ के बारे में बताना होगा - बस हमारी पहली रिलीज किया गया। विशेष रूप से सिल्वरलाइट + आरआईए सेवाओं के लिए एमवीवीएम तक पहुंचने का एक शानदार तरीका प्रदान करता है। बहुत सारी एमवीवीएम सामग्री को सरल बनाता है, और अधिसूचना वर्ग के साथ कुछ और नियंत्रक-जैसे कार्यों को प्रदान करता है। http://slmvvms.codeplex.com/

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