2011-01-17 8 views
6

मान लें कि मेरे पास एक प्रोग्राम है जिसे दो अलग-अलग तरीकों से कुछ डेटा का प्रतिनिधित्व करना है। अगर मैं इसे दो अलग-अलग व्यू मॉडल्स के जरिए पूरा करना चाहता हूं, तो यह ऐसा लगता है कि उन्हें मॉडल ऑब्जेक्ट का एक ही उदाहरण साझा करना चाहिए। तो यह आम तौर पर WPF के साथ एमवीवीएम में कैसे पूरा किया जाता है?मॉडल मॉडल आमतौर पर व्यूमोडेल ऑब्जेक्ट्स के बीच कैसे साझा किया जाता है?

एक तरह से मैं के बारे में सोच सकते हैं कि ViewModel कंस्ट्रक्टर्स उचित मॉडल की एक उदाहरण ले सकता है और सभी तारों Application.Startup घटना के लिए कोई हैंडलर में किया जा सकता है। मुझे यह याद नहीं है कि में से किसी भी उदाहरण में मैंने जो उदाहरण देखा है, लेकिन मैंने इसे अभी याद किया होगा।

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

अन्य उदाहरण में, यह, लग रहा था जैसे दृश्य बनाया मॉडल ही वस्तुओं और उन्हें ViewModels, जो इस तरह के एक महान विचार की तरह या तो नहीं लगता है के लिए पारित के बाद से देखें मॉडल के बारे में कुछ भी पता नहीं करना चाहिए ?

कुछ उदाहरण भी मॉडल कक्षाएं, सिर्फ दृश्य और ViewModels के लिए नहीं लग रहे हैं।

तरीके वहाँ बेहतर मैं उल्लेख नहीं किया है कर रहे हैं?

साथ ही, मैं एक निर्भरता इंजेक्शन ढांचे या आईओसी कंटेनर इस्तेमाल करना चाहिए? जैसा कि बताया गया है, मैंने वास्तव में पहले एक का उपयोग नहीं किया है और मैंने सोचा कि यह इस समय काम कर रहे कार्यक्रमों के आकार के लिए ओवरकिल हो सकता है। नहीं होने के कारण वास्तव में किसी भी बहुत भारी में देखा, मैं गलत हो सकता है।

उत्तर

2

सामान्य दृष्टिकोण एक दृश्य मॉडल के निर्माता में एक मॉडल के पारित करने के लिए है। शायद, जिन उदाहरणों पर आपने देखा है वे सादगी के लिए इसे नहीं दिखाते हैं। तो यदि आपके पास दो दृश्य मॉडल हैं जो एक ही डेटा (मॉडल) के साथ काम करते हैं, तो दोनों में मॉडल के उसी उदाहरण का उपयोग करें।

निर्भरता इंजेक्शन और आईओसी कंटेनर का सवाल है, जैसा कि आप ने कहा कि यह छोटी परियोजनाओं के लिए overkill है, लेकिन अगर आप परियोजना बड़ा हो जाता है तो यह आपको लाभ का एक बहुत लाने सकता है।

+3

ठीक है, लेकिन यह आम तौर पर कैसे किया जाता है? आमतौर पर कौन सी कक्षा मॉडल ऑब्जेक्ट का उदाहरण बनाती है और इसे उपयुक्त व्यूमोडेल ऑब्जेक्ट्स में पास करती है? यही वह मुख्य बात है जिसे मैं इस समय उलझन में डाल रहा हूं। – foven

-1

आपको मॉडल साझा करना होगा: यदि आपके पास यूआई में अपना डेटा INOTifyPropertyChanged के माध्यम से अपडेट नहीं किया गया है - यह एमवीवीएम के प्रमुख विचारों में से एक है - आपको मॉडल साझा करना चाहिए (कम से कम प्रासंगिक पोर्ट एक निश्चित ViewModel) ViewModels के बीच।

+1

उत्तर के लिए धन्यवाद।मुझे पहले से ही पता है कि मुझे मॉडल साझा करने की ज़रूरत है, जो मैं उलझन में हूं, वह वास्तव में प्रबंधन के लिए सबसे अच्छा विकल्प है। दूसरे शब्दों में, अलग-अलग ViewModel ऑब्जेक्ट्स के मॉडल के समान उदाहरण प्रदान करने के शायद अलग-अलग तरीके हैं। मैं जानना चाहता हूं कि इसे पूरा करने के सामान्य तरीके क्या हैं और जब प्रत्येक उपयुक्त है, प्रत्येक दृष्टिकोण के पेशेवर/विपक्ष इत्यादि। – foven

0

आप एक सिंगलटन/स्थिर वर्ग के रूप में एक अनुप्रयोग विस्तृत मॉडल सेट कर सकते हैं। फिर वही उदाहरण डिफ़ॉल्ट रूप से साझा किया जाता है।

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