मैं उल्लिखित एमवीवीएम पैटर्न के साथ प्रयोग कर रहा हूं और मुझे कुछ मामलों में स्पष्ट सीमाओं को परिभाषित करने में कठिनाई हो रही है। मेरे आवेदन में, मेरे पास एक संवाद है जो मुझे नियंत्रक के लिए कनेक्शन बनाने की अनुमति देता है। संवाद के लिए एक व्यूमोडेल क्लास है, जो काफी सरल है। हालांकि, संवाद एक अतिरिक्त नियंत्रण भी होस्ट करता है (ContentTemplateSelector
द्वारा चुना गया), जो कि कनेक्ट होने वाले विशेष प्रकार के नियंत्रक के आधार पर भिन्न होता है। इस नियंत्रण में अपना खुद का व्यूमोडल है।एमवीवीएम: नेस्टेड व्यू मॉडल्स के बीच बातचीत को कैसे संभाला जाए?
मुझे जो समस्या आ रही है वह यह है कि, जब मैं ठीक दबाकर संवाद बंद करता हूं, तो मुझे वास्तव में अनुरोधित कनेक्शन बनाना होगा, जिसके लिए आंतरिक नियंत्रक-विशिष्ट व्यूमोडेल क्लास में जानकारी प्राप्त की आवश्यकता होती है। यह केवल कंट्रोलर-विशिष्ट व्यू मॉडेल क्लास को एक सामान्य इंटरफ़ेस लागू करने के लिए मोहक है जो कनेक्शन बनाता है, लेकिन आंतरिक व्यूमोडेल वास्तव में इस निर्माण का प्रभारी होना चाहिए?
मेरा सामान्य प्रश्न यह है कि: क्या आम तौर पर स्वीकार्य डिज़ाइन पैटर्न हैं कि व्यूमोडल्स को एक-दूसरे के साथ कैसे बातचीत करनी चाहिए, खासकर जब 'माता-पिता' वीएम को 'बच्चे' वीएम से मदद की आवश्यकता होती है ताकि पता चल सके कि क्या करना है?
संपादित करें:
मैं एक डिजाइन थोड़ा क्लीनर है कि तुलना में मैं मूल रूप से सोच रहा था के साथ आया था, लेकिन मैं अभी भी यकीन है कि अगर यह 'सही' तरीका यह है है नहीं कर रहा हूँ। मेरे पास कुछ बैक-एंड सेवाएं हैं जो एक ContentTemplateSelector को नियंत्रक उदाहरण देखने के लिए अनुमति देती हैं और छद्म-जादुई रूप से कनेक्शन निर्माता के लिए प्रदर्शित करने के लिए नियंत्रण पाती हैं। इस बारे में मुझे परेशान करने वाला यह है कि मेरे शीर्ष-स्तरीय व्यू मॉडेल को उत्पन्न नियंत्रण के लिए DataContext
पर देखना होगा और इसे एक उचित इंटरफ़ेस पर डालना होगा, जो एक बुरा विचार जैसा लगता है (क्यों देखें DataContext
को बनाने के साथ कुछ भी करना चाहिए ? कनेक्शन)
मैं कुछ इस तरह के साथ समापन (सरल बनाने):
public interface IController
{
IControllerConnectionBuilder CreateConnectionBuilder();
}
public interface IControllerConnectionBuilder
{
ControllerConnection BuildConnection();
}
मैं अपने भीतर की ViewModel वर्ग IControllerConnectionBuilder
को लागू किया है और नियंत्रक भीतरी ViewModel देता है। शीर्ष-स्तरीय व्यूमोडेल फिर IControllerConnectionBuilder
(छद्म-जादुई तंत्र के माध्यम से) को विज़ुअलाइज़ करता है। यह अभी भी मुझे थोड़ा परेशान करता है कि यह मेरा आंतरिक व्यू मॉडेल इमारत का प्रदर्शन कर रहा है, लेकिन कम से कम अब मेरे शीर्ष-स्तरीय व्यू मॉडेल को गंदे विवरणों के बारे में पता नहीं है (यह भी पता नहीं है कि दृश्य नियंत्रण एक का उपयोग कर रहा है ViewModel)।
यदि अतिरिक्त इसे साफ करने के तरीके हैं तो मैं अतिरिक्त विचारों का स्वागत करता हूं। यह अभी भी मुझे स्पष्ट नहीं है कि ViewModel के लिए यह कितना ज़िम्मेदारी है 'ठीक है'।
हम अपने काम पर लगातार इस तरह के प्रश्न पूछते हैं। आपने इस सवाल को बहुत अच्छी तरह से कहा है, इसलिए मुझे आशा है कि आपको यहां कुछ अच्छी प्रतिक्रिया मिलेगी। –
शुक्र है कि यह एक पालतू परियोजना है, इसलिए मेरे पास विभिन्न डिज़ाइनों की खोज करने की लक्जरी है। मेरी दुकान ने डब्ल्यूपीएफ या एमवीवीएम को अपनाया नहीं है क्योंकि इस शुरुआती चरण में ओवरहेड और अजीबता हमारे वर्तमान कार्यक्रमों के लिए स्वीकार्य नहीं है। मैं दृढ़ता से विश्वास है कि यह एक ऐसी तकनीक है उत्पादकता में बड़ा लाभांश का भुगतान करेगा एक बार हम समझते हैं कि यह कैसे उपयोग करने के लिए है, लेकिन यह परिप्रेक्ष्य में इस तरह के एक बदलाव है कि यह जानते हैं कि एक डिजाइन में रेखाएं करने के लिए कठिन है। –