2010-08-05 12 views
15

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

कृपया इस प्रश्न के उत्तर के रूप में अपने सर्वोत्तम अभ्यास पोस्ट करें।

+3

एक समुदाय विकी इसलिए कोई भी संपादन कर को यह परिवर्तित करने पर विचार करें। –

+0

मैं एक कॉम-विकी के रूप में यह के बारे में सोच woulnd't। प्रश्नकर्ता इस अच्छा सवाल के लिए प्रतिष्ठा के योग्य है। – Shimmy

उत्तर

25
MVVM-लाइट के

बेसिक प्रयोग

  1. intialize DispatcherHelper App.cs फ़ाइल के Application_Startup समारोह में
  2. BaseClass से ViewModels बनाएं
  3. हमेशा एक ViewModelLocator वर्ग है, जो अपने सभी दृश्य मॉडल हों बनाएं और आपके आवेदन में लिंक किया गया है संसाधन
  4. अपने दृश्य में कार्यों का पर्दाफाश करने के लिए रिलेकॉमैंड का उपयोग करें
  5. डिस्पैचहेल्पर का उपयोग कब करें सीखें।

सफाई विचार:

  1. जब उचित हो, सफाई पर अपने DomainContext के EntitySet स्पष्ट करने के लिए अपने ViewModel में जोड़ें()?
  2. दृश्यमान को साफ़ करने के लिए अपने ViewModelLocator के CleanupSomeVM() फ़ंक्शन को कॉल करें जब उन्हें एप्लिकेशन में सक्रिय रूप से आवश्यकता नहीं है।

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

Blendability के लिए:

  1. एक अंतरफलक के लिए तत्व सेवा/क्वेरी क्रियान्वयन।
  2. प्रत्येक सेवा कार्यान्वयन वर्गों (डिजाइन के लिए 1, उत्पादन के लिए 1)
  3. अपने प्रत्येक ViewModel के भीतर के लिए 2 कक्षाएं बनाएं, अपने स्वयं सेवा क्लास (उपयोग IsInDesignMode) आवश्यक के रूप में blendable सेवा कार्यान्वयन बनाने के लिए लागू करते हैं।
  4. सेवा प्रवर्तन कक्षा के भीतर अपने DomainContext को पकड़ने के लिए एक स्थिर चर का उपयोग करें।
  5. DispatcherHelper जोड़ें (ViewModels के निर्माता में प्रारंभ करें), लेकिन केवल जब डिज़ाइन मोड में। एक पृष्ठ लोड करते समय मिश्रण ऐप लोड नहीं करता है, और यह उसके आसपास काम करता है।

जोड़ा व्यापार तर्क के लिए:

  1. ViewModel में तो मॉडल में व्यापार तर्क जोड़े पहले।
  2. उचित परिवर्तन/अद्यतन घटनाओं के लिए तर्क जोड़ने के लिए मॉडल के आंशिक तरीकों का उपयोग करें।
  3. अपने मॉडल पर सारांश और गणना किए गए मान प्रदान करने के लिए केवल-पढ़ने योग्य गुण (केवल गेटर) जोड़ें।

दृश्य के लिए:

  1. हमेशा लोकेटर वस्तु को जड़ से आबद्ध।
  2. कोड-पीछे तर्क को लेआउट या कस्टम यूआई तर्क में ही रखने की कोशिश करें। अपने ViewModel का संदर्भ देने से बचें।

संग्रह के लिए: अपने ViewModels में संग्रह के लिए

  1. उपयोग CollectionViewSource, DomainContext के EntitySet
  2. का एक स्रोत के साथ लागू करें सभी छनन, सॉर्टिंग, और अपने ViewModel में CollectionViewSource के समूहीकरण तर्क।
  3. ServiceCalls के बाद, .View.Refresh कॉल() अपने CollectionViewSource यूआई अद्यतन करने के लिए वस्तुओं पर आवश्यक के रूप में।

ViewModel समन्वय (नियंत्रक तर्क) के लिए

  1. उपयोग संदेश किफ़ायत से, बहुत अधिक जटिलता का प्रबंधन करने के लिए मुश्किल हो सकता है।
  2. NotificationMessage और PropertyChangedMessage कक्षाओं का प्रयोग करें भेजें/साथ प्राप्त करने के लिए।

रिया DomainServices के लिए:

  1. अद्यतन/डालने जारी रहती है परिवर्तन समारोह में किसी भी प्रवेश, नहीं लागू/तर्क को हटा दें।
  2. सम्मिलित करें, अद्यतन के दौरान काम करता है, अगर आप EntityStatus संघर्ष को रोकने के लिए, एक और प्रसंग से नेविगेशन संपत्ति के माध्यम से एक और इकाई को संदर्भित करने के लिए, या तो पहले EntityStatus जांच करें, या लोड इकाई की जरूरत को हटा दें।

डिबगिंग/परीक्षण के लिए:

  1. चेक बाध्यकारी त्रुटियों के लिए आउटपुट विंडो और उन्हें ठीक करें। बाध्यकारी त्रुटियां उपयोगकर्ता को चुपचाप विफल हो जाती हैं, लेकिन एप्लिकेशन प्रदर्शन और अपेक्षित व्यवहार को घटा देती हैं।
  2. किसी भी जोड़ा मॉडल/व्यापार तर्क की पुष्टि करने के सिल्वरलाइट में यूनिट टेस्ट बनाएं
  3. यूनिट टेस्ट प्रोजेक्ट बना सर्वर-साइड तर्क और कार्यों

इकाई की रूपरेखा के लिए परीक्षण करने के लिए:

  1. 1- रखें डोमेन सेवा में कॉन्टैक्ट कॉन्टेक्स्ट के टू-1 मैच। इस तरह से विभाजित करने की कोशिश करने से मुद्दों का कारण बनता है।
  2. [संगठन] विशेषता का उपयोग न करें जब तक आप पूरी तरह से बहुत समय खर्च करने के लिए सावधानी से अपने सम्मिलित करें, अद्यतन निर्माण करना चाहते हैं, और तर्क को हटा दें।
  3. अपने आरआईए क्लाइंट पर कस्टम प्रकारों को वापस करने के लिए एक अलग सेवा का उपयोग करें। उन्हें अपने DomainService करने के लिए अपने EntityFramework वस्तु के लिए
  4. प्रदर्शन सर्वर साइड अद्यतन/एकीकरण तर्क (जैसे अन्य प्रणालियों को अद्यतन करने के रूप में) PersistChangeSet समारोह में, न जोड़ें में नहीं सम्मिलित करें, अद्यतन, कार्यों को हटा दें।यह गलती से नेविगेशन गुण है, जो अपने अलग संस्करण गैर अद्यतन छोड़ देंगे के माध्यम से एक इकाई में खींच कर सकेंगे।
  5. एक अतिरिक्त संदर्भ बनाएं अद्यतन/एकीकरण तर्क दौरान वर्तमान मूल्यों को खोजने के।
संबंधित मुद्दे