मैं MVVM पैटर्न का उपयोग करके WPF एप्लिकेशन बना रहा हूं। अभी, मेरे व्यूअमॉडल्स मॉडल को पुनः प्राप्त करने के लिए सर्विस लेयर को कॉल करते हैं (कैसे व्यूमॉडल के लिए प्रासंगिक नहीं है) और उन्हें व्यूमॉडल में परिवर्तित करें। मैं व्यूमोडेल के लिए आवश्यक सेवा पास करने के लिए कंस्ट्रक्टर इंजेक्शन का उपयोग कर रहा हूं।
यह आसानी से परीक्षण करने योग्य है और कुछ निर्भरता वाले व्यूमाडल्स के लिए अच्छी तरह से काम करता है, लेकिन जैसे ही मैं जटिल मॉडल के लिए viewModels बनाने की कोशिश करता हूं, मेरे पास एक इंजेक्टर है जिसमें बहुत सारी सेवाओं को इंजेक्ट किया जाता है (प्रत्येक निर्भरता को प्राप्त करने के लिए और सभी उपलब्ध मूल्यों की एक सूची। एक आइटम के लिए बाध्य करने के लिए उदाहरण के लिए)। मैं सोच रहा हूं कि इस तरह से कई सेवाओं को कैसे संभालना है और अभी भी एक दृष्टिकोण है कि मैं आसानी से इकाई परीक्षण कर सकता हूं।
मैं कुछ समाधान सोच रहा हूँ:
सभी उपलब्ध सेवाओं वाले इंटरफेस के रूप में एक सेवा सिंगलटन (IServices) बनाना। उदाहरण: Services.Current.XXXService.Retrieve (), Services.Current.YYYService.Retrieve ()। इस तरह, मेरे पास उन सेवाओं के एक टन के साथ एक विशाल निर्माता नहीं है।
ViewModel द्वारा उपयोग की जाने वाली सेवाओं के लिए एक पहलू बनाना और मेरे viewmodel के ctor में इस ऑब्जेक्ट को पास करना। लेकिन फिर, मुझे अपने कॉम्प्लेक्स व्यूमोडल्स में से प्रत्येक के लिए एक मुखौटा बनाना होगा, और यह थोड़ा अधिक हो सकता है ...
आपको क्या लगता है कि इस तरह की वास्तुकला को लागू करने का "सही" तरीका है?
new
अन्य व्यू मॉडल बनाने के लिए उपयोग नहीं करना चाहिए , लेकिन एमडीआई एप्लिकेशन के रूप में कुछ के बारे में सोचें जहां "नए दस्तावेज़" बटन या मेनू पर क्लिक करने से एक नया टैब जुड़ जाएगा या एक नई विंडो खुल जाएगी। शेल / कंडक्टर को किसी चीज के नए उदाहरण बनाने में सक्षम होना चाहिए , भले ही वह अप्रत्यक्ष की एक या कुछ परतों के पीछे छिपा हो।