मैंने एक बार एक MVVM / WPF परियोजना शुरू की है, जिसे अंततः बनाया और तैनात किया गया था, और इसके लिए मैंने बहुत सारे Caliburn.Micro MVVM फ्रेमवर्क का अध्ययन किया। तथ्य यह है: मैंने उस के लिए कैलिबर्न.माइक्रो का उपयोग नहीं किया , और कुछ एमवीवीएम अवधारणाओं को खुद (विशेष रूप से, बस ViewModelBaseऔर RoutedCommandकक्षाओं) को लागू करने के लिए समाप्त कर दिया ।
अब मुझे उसी तर्ज पर एक बड़े प्रोजेक्ट के लिए सौंपा गया: एक "सिंगल-यूजर रिच क्लाइंट ऑफलाइन डेस्कटॉप एप्लिकेशन", इसलिए कहने के लिए, और मैंने कैलिबर्न.माइक्रो का उपयोग करने का फैसला किया। और यहीं से मेरी "समस्या" शुरू होती है।
मैंने इस प्रसिद्ध ब्लॉग पोस्ट में पढ़ा है , जिसका शीर्षक कहता है कि "यदि आप MVVM का उपयोग कर रहे हैं तो आपको एक रूपरेखा की आवश्यकता है",:
"एमवीवीएम की तरह एक फ्रेमवर्क के बिना कुछ करने की कोशिश करना बहुत बड़ी मात्रा में काम है। डुप्लिकेट कोड के टन, पहिया को फिर से मजबूत करना , और लोगों को अलग तरह से सोचने के लिए फिर से शिक्षित करना ।
कम से कम एक रूपरेखा के साथ आप डुप्लिकेट कोड से बचते हैं और उम्मीद करते हैं कि आपको पहिया को फिर से नहीं करना होगा - जिससे आप लोगों को फिर से शिक्षित करने पर ध्यान केंद्रित कर सकें। रीट्रेनिंग हिस्सा आम तौर पर अपरिहार्य है, लेकिन एक रूपरेखा नलसाजी कोड और संरचना प्रदान करती है, जिससे प्रक्रिया आसान हो जाती है। "
मैं पहले पढ़ने पर सहमत हो जाऊंगा लेकिन अपने वास्तविक आवेदन में कैलिबर्न.माइक्रो (सीएम) के साथ मेरा वास्तविक अनुभव अव्यवस्था और भटकाव का है। यही है, रूपरेखा बिल्कुल आसान प्रक्रिया नहीं बना, काफी विपरीत है। बल्कि (भी) अनौपचारिक दस्तावेज में रोब Eisenberg द्वारा प्रदान की कभी दोहरा उदाहरण पढ़ना, और घुमावदार प्रदान की नमूनों से अनुमान उपयोग प्रतिमानों की कोशिश कर रहा है, और उनकी पूरी तरह से अप्रत्यक्ष वर्ग और इंटरफ़ेस रिश्ते, जहां चीजें काम करने के लिए डिज़ाइन कर रहे आधारित पर साइड-इफेक्ट्स, तब तक मानवीय रूप से असंभव लगते हैं जब तक कि आप एक अनुभवी जीनियस (शेख़ी के लिए खेद नहीं है, लेकिन मुझे लगता है कि आप जानते हैं कि मेरा क्या मतलब है)।
यह उल्लेख नहीं करने के लिए कि किसी भी उपर्युक्त-तुच्छ परिदृश्य में IoC कंटेनर शामिल हैं, जो कि मैंने कभी भी काम नहीं किया है, और जो एक समस्या को हल करने के लिए लगता है जो मेरे पास भी नहीं है । मुझे अपनी समस्या और एप्लिकेशन डोमेन के बारे में सोचने के बजाय उन चीजों को सीखने में अधिक प्रोजेक्ट घंटे खर्च करने का मन नहीं है। मैं सिर्फ एक केला चाहता था, लेकिन सीएम ने मुझे एक गोरिल्ला (IoC) दिया जो केले की एक टोकरी पकड़ा था।
अब जब मैं अपने होमस्पून MVVM ढांचे में वापस जाने पर विचार कर रहा हूं - केवल कुछ मुट्ठी भर MVVM- विशिष्ट वर्गों से बना हूं जिन्हें मैं वास्तव में लागू करना चाहता हूं - मैं कम से कम सीएम को मौका देना चाहूंगा, अगर मैं यहां कुछ खो रहा हूं, या बस स्पष्ट रूप से "गलत तरीके से" चीजें करना सरासर अनुभवहीनता और अज्ञानता है। और इसलिए प्रश्न यह है:
व्यापक रूप से आम सहमति है कि "रूपरेखा चीजों को आसान और अधिक प्राकृतिक बनाती है", लेकिन अगर मैं काफी विपरीत अनुभव कर रहा हूं, तो क्या इसका मतलब यह है कि मुझे फ्रेमवर्क का उपयोग नहीं करना चाहिए, या मैं इसे गलत तरीके से सीखने की कोशिश कर रहा हूं? वहाँ एक सुराग है कि मैं भी पहली जगह में एक रूपरेखा का उपयोग नहीं किया जाना चाहिए? या वहाँ कुछ "सही" तरीका है यह जानने के लिए कि सरल एमवीवीएम विकास के लिए सीएम का उपयोग कैसे करें?
RelayCommandकार्यान्वयन नहीं मिल सका (क्योंकि यह ICommand संपत्तियों के लिए बाध्य करने के बजाय, सम्मेलन द्वारा सीधे तरीकों से "बांधता है")।
RelayCommandअगर आप Caliburn Micro द्वारा उपयोग किया गया कोई अन्य पुस्तकालय से उपयोग नहीं कर सकते हैं तो यह आपके लिए काम नहीं करता है।
EventAggregatorमैसेजिंग के लिए, औरNotificationObjectएक ViewModelBase के लिए, और MVVM लाइट काRelayCommandकमांड के लिए उपयोग करना पसंद है। महत्वपूर्ण बात यह है कि यह पहचानना कि आपके लिए क्या समस्याएं हल हो रही हैं, और केवल उन समाधानों का उपयोग करें। ऐसा महसूस न करें कि आप पूरे ढांचे के पुस्तकालय का उपयोग करने के लिए मजबूर हैं।