पारंपरिक दृष्टिकोण या सिद्धांत के अनुसार, ViewModel उपयोगकर्ता इंटरफ़ेस परत का हिस्सा होना चाहिए। कम से कम नाम ऐसा कहता है।
लेकिन जब आप इसे एंटिटी फ्रेमवर्क, एमवीसी, रिपोजिटरी इत्यादि के साथ लागू करने के लिए नीचे आते हैं, तो आप कुछ और महसूस करते हैं।
किसी को व्यूमोडल्स (अंत में उल्लिखित डीटीओ) के साथ एंटीटी मॉडल को मैप करना होगा। क्या यह ए में किया जाना चाहिए) यूआई परत (नियंत्रक द्वारा), या बी में) सेवा परत?
मैं विकल्प बी के साथ जाता हूं विकल्प ए एक सरल तथ्य के कारण नो-नो है क्योंकि कई इकाई मॉडल एक व्यूमोडेल बनाने के लिए एक साथ मिलते हैं।हम यूआई परत में अनावश्यक डेटा पास नहीं कर सकते हैं, जबकि विकल्प बी में, सेवा डेटा के साथ खेल सकती है और मैपिंग (व्यूमोडेल में) के बाद केवल यूआई परत को आवश्यक/न्यूनतम पास कर सकती है।
लेकिन, मान लीजिए कि हम विकल्प ए के साथ जाते हैं, हम यूआई परत (और सेवा परत में इकाई मॉडल) में व्यूमोडेल डालते हैं।
यदि सेवा परत को ViewModel पर मैप करने की आवश्यकता है, तो सेवा परत को UI परत में ViewModel तक पहुंचने की आवश्यकता है। कौन सी पुस्तकालय/परियोजना? व्यूमोडेल यूआई परत में एक अलग परियोजना में होना चाहिए, और इस परियोजना को सेवा परत द्वारा संदर्भित करने की आवश्यकता है। यदि व्यूमोडेल एक अलग परियोजना में नहीं है, तो परिपत्र संदर्भ है, इसलिए कोई नहीं। सेवा परत को यूआई परत तक पहुंचने के लिए यह अजीब लगता है लेकिन फिर भी हम इसका सामना कर सकते हैं।
लेकिन क्या होगा यदि इस सेवा का उपयोग करके कोई और यूआई ऐप है? यदि मोबाइल ऐप है तो क्या होगा? ViewModel कितना अलग हो सकता है? क्या सेवा एक ही दृश्य मॉडल प्रोजेक्ट तक पहुंच सकती है? या सभी यूआई परियोजनाओं प्रतिस्पर्धा करेंगे?
इन विचारों के बाद मेरा उत्तर सेवा परत में व्यूमोडेल प्रोजेक्ट डालना होगा। प्रत्येक यूआई परत को सर्विस लेयर को किसी भी तरह एक्सेस करना होगा! और वहां बहुत सारे व्यूमोडल्स हो सकते हैं जिन्हें वे सभी उपयोग कर सकते हैं (इसलिए सेवा परत के लिए मानचित्रण आसान हो जाता है)। मैपिंग इन दिनों linq के माध्यम से किया जाता है, जो एक और प्लस है।
अंततः डीटीओ के बारे में यह चर्चा है। और ViewModels में डेटा एनोटेशन के बारे में भी। डेटा एनोटेशन के साथ ViewModels सेवा परत में नहीं रह सकता है। तो फिर डीटीओ दो के बीच एक मैपिंग (ऑटोमैपर के साथ कहें) के साथ व्यूमोडेल की एक सटीक प्रति होगी। फिर डीटीओ में यूआई (या एकाधिक अनुप्रयोग) के लिए आवश्यक तर्क है और सेवा परत में रहता है। और UI परत ViewModel केवल कुछ 'व्यवहार' (उदाहरण: विशेषता) के साथ डीटीओ से डेटा कॉपी करने के लिए है।
हालांकि सीधे प्रश्न से संबंधित नहीं है। काफी अब मैं क्या कर रहा हूँ: (48 प्रारंभ होने पर @ 11)
यही है, लेकिन मैं कुछ करना ही होगा 'ViewModel बहाना' (एक और viewmodel अंदर viewmodel) & 'कमांड' इस में उल्लेख किया channel 9 link देखना चाहिए भी तलाश के लायक है गलत मॉडल के रूप में दृश्य मॉडल को ध्यान में रखते हुए मुझे बहुत सशर्त तर्क लगता है। शायद मुझे अपने दृश्य को छोटे हिस्सों में तोड़ने की जरूरत है। –
मेरे पास वर्तमान में एक संपादन दृश्य है जो इकाई की स्थिति के आधार पर addapts। क्या मैं विभिन्न राज्यों के लिए कई विचार बनाने से बेहतर होगा? –
अपने संपादन दृश्य और मॉडल को देखे बिना, जवाब देना मुश्किल है। – queen3