2009-09-24 4 views
10

हम एमवीवीएम पैटर्न का उपयोग कर एक ऐप बना रहे हैं, हमारे पास नियंत्रक हैं जो DI का उपयोग करके सभी विचारों और दृश्यमानों को तारित करते हैं। मैंने देखा है कि एमवीवीएम के सभी उदाहरण वास्तव में सरल हैं और 1 दृश्य है। नियंत्रक को वापस बात करने के लिए कैसे/देखना चाहिए? नियंत्रक मॉडल और विचारों के बारे में जानता है, क्या व्यूमोडेल घटनाओं को वापस नियंत्रक को भेजना चाहिए? एक बचत कहाँ होनी चाहिए? आदर्श? नियंत्रक?एमवीवीएम में नियंत्रक, व्यूमोडेल से इसके नियंत्रक को जानकारी कैसे प्राप्त करें?

उत्तर

3

हम नियंत्रकों का भी उपयोग करते हैं लेकिन हमारे मामले में वे एप्लिकेशन वर्कफ़्लो के लिए ज़िम्मेदार हैं। नियंत्रक ViewModel और मॉडल जानता है लेकिन ठोस दृश्य नहीं है क्योंकि यह आईओसी कंटेनर द्वारा इंजेक्शन दिया जाएगा।

आपको एक उदाहरण है कि पता चलता है में रुचि रखते हैं सिर्फ एक यूआई (मॉडल संवाद, सशर्त कार्यप्रवाह के साथ जादूगर) की तुलना में अधिक है तो आप पर एक नज़र हो सकता है:

WPF अनुप्रयोग फ्रेमवर्क (WAF) - http://waf.codeplex.com

+1

हां हम विपरीत चीजें कर रहे हैं। हमारे नियंत्रक को एक व्यू इंटरफेस के बारे में पता है और व्यूमोडेल और मॉडल इंजेक्ट करता है। – nportelli

5

क्या आपका व्यू मॉडेल आईकंट्रोलर या किसी अन्य इंटरफ़ेस पर निर्भरता नहीं ले सकता है, इसलिए वे इससे बात कर सकते हैं? मैं जितना संभव हो सके ViewModel से अधिक एप्लिकेशन तर्क रखने की कोशिश करता हूं, क्योंकि ये कक्षाएं आसानी से फूली हो सकती हैं।

MyViewModel(IController controller) 
{ 
    this.controller = controller; 
} 

void Save() 
{ 
    this.controller.Save(); 
} 

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

+1

खैर नियंत्रक जानता है viewmodel के बारे में, हम एक 2 रास्ता निर्भरता हो रहा या संभावना है कि एक viewmodel अन्य नियंत्रक द्वारा पुनः उपयोग किया जा मेरी नहीं करना चाहती। – nportelli

+1

हम्मम्म, मुझे पूरा यकीन नहीं है कि मैं समझता हूं कि आप किस पैटर्न का उपयोग कर रहे हैं। क्या आप कह रहे हैं कि आपके पास प्रति दृश्य एक नियंत्रक है? क्या एमवीवीएम की तुलना में अधिक एमवीसी नहीं है? हो सकता है कि आप अपने प्रश्न में थोड़ा सा उदाहरण कोड जोड़ सकें ताकि यह दिखाया जा सके कि आप एक दृश्य और व्यूमोडेल कैसे बनाते हैं। –

+0

एक नियंत्रक प्रति दृश्य संख्या, एक नियंत्रक प्रति उपयोग मामले। क्षमा करें अगर मैंने यह स्पष्ट नहीं किया। – nportelli

1

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

+0

हमारे नियंत्रक को वीएम के बारे में पता नहीं है। बस देखने के लिए और इंटरफ़ेस। वहां से वीएम इंजेक्शन दिया जाता है। विचार यह है कि नियंत्रक यूआई लागू करने वाले पैटर्न के बारे में नहीं जानता है, इसलिए हम संभावित रूप से UI को आसानी से स्वैप कर सकते हैं। जो मुझे लगता है हमारी समस्याओं का कारण बन रहा है। – nportelli

0

उन घटनाओं का उपयोग करने के बारे में जहां नियंत्रक वीएम घटनाओं की सदस्यता लेता है या मध्यस्थ पैटर्न का उपयोग करता है जहां मध्यस्थ में वीएम में इंजेक्शन दिया जाता है।

2

ऐसे अनुप्रयोग के मामले में जिसमें एकाधिक मॉड्यूल हैं और चिंताओं को अलग करने की आवश्यकता है, मैं प्रिज्म फ्रेमवर्क का उपयोग करने की सलाह दूंगा।

http://msdn.microsoft.com/en-us/library/gg406140.aspx

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