के साथ माइक्रोसॉफ्ट (या अन्य) रिबन का उपयोग करना हमारा आवेदन कई मॉड्यूल और दृश्य के साथ एक बड़ी परियोजना है। मुख्य खिड़की में एक रिबन है, और हम आवेदन में रिबन को एकीकृत करने का सबसे अच्छा तरीका ढूंढ रहे हैं।बड़ी परियोजना और एमवीवीएम
मैंने एक सेवा बनाई है जो एक दृश्य मॉड्यूल उनके लिए प्रासंगिक रिबन आइटम जोड़ने के लिए पंजीकरण कर सकता है, और इसके अतिरिक्त, कोई भी मुख्य दृश्य उदाहरण उस उदाहरण के लिए प्रासंगिक अपने रिबन आइटम प्रदान कर सकता है। एक रिबन इटैम एक छोटी सी कक्षा है जो रिबन आइटम के विकल्पों को सारणी देती है, और मुख्य रूप से शीर्षक, विवरण, कमान, यूआईटीपी और चाइल्ड इटम्स है। जब मुख्य दृश्य बदलता है तो सेवा रिबन के पुनर्निर्माण के लिए प्रभारी होती है।
मेरा एक सहयोगी सोचता है कि यह खराब एमवीवीएम है, क्योंकि उपयोगकर्ताओं को सी # कोड में अपने रिबन दृश्य को डिजाइन करने की आवश्यकता है, न कि एक्सएएमएल में, और वह यह भी कहता है कि आइटमों को अक्षम या सक्षम करने के लिए इस तरह से कठिन होगा एक बार, क्योंकि इन वस्तुओं के प्रत्येक कमांड को इसके CanExecute को अलग से अपडेट करने की आवश्यकता होगी। इसके बजाए, उन्होंने एक मुख्य रिबन व्यू और व्यूमोडेल फाइलें रखने का सुझाव दिया, जहां प्रत्येक डेवलपर जो उसके मॉड्यूल या व्यू के लिए रिबन बटन जोड़ना चाहता है उसे व्यू एक्सएएमएल में जोड़ने और व्यूमोडेल में एक प्रासंगिक कमांड जोड़ने की आवश्यकता होगी। इसके अलावा, VisualStates का उपयोग यह निर्धारित करने के लिए किया जाएगा कि ViewModel में परिवर्तनों के आधार पर कौन से आइटम प्रदर्शित किए जाएंगे या सक्षम होंगे (जैसे दृश्य परिवर्तन, या चयन परिवर्तन)। मुझे वास्तव में यह समाधान पसंद नहीं है, मुख्य रूप से क्योंकि सभी डेवलपर्स को एक बार बड़ी फाइल में अपने मॉड्यूल ज्ञान रखना होगा।
ध्यान दें कि रिबन में कुछ आइटम (जैसे विकल्प, निकास) पूरे एप्लिकेशन के लिए आम हैं, जबकि कुछ विशिष्ट एप्लिकेशन डोमेन से प्रासंगिक हैं और कुछ केवल विशिष्ट दृश्य के लिए प्रासंगिक हैं।
संपादित करें: मुझे लगता है कि मेरा मुख्य प्रश्न यह है कि कई विकास टीमों को एक रिबन पर एकीकृत करने की अनुशंसित तरीका क्या है? क्या हमारे पास एक सिंगल रिबन व्यू और सिंगल रिबन व्यूमोडेल होना चाहिए जिसमें रिबन में सभी संभावित आइटम होंगे, और प्रत्येक टीम इन आइटमों को इन वी/वीएम में जोड़ देगी और उन्हें दिखाने के लिए तर्क को परिभाषित करेगी (शायद दृश्य स्थिति का उपयोग करके) ? या क्या हम प्रत्येक व्यू, व्यू-मॉडल या मॉड्यूल को रिबन आइटम (अपने स्वयं के सी # कोड के भीतर) सेवा के खिलाफ पंजीकरण करते हैं, और उस सेवा में तब आवश्यक रिबन प्रस्तुत करते हैं जब उस दृश्य में पंजीकृत सभी आइटमों के साथ सक्रिय दृश्य बदलता है? या क्या इस एकीकरण को हासिल करने का कोई बेहतर तरीका है?
आपको क्या लगता है? क्या आपके पास एक बेहतर विचार है या एक एकल रिबन संसाधन को प्रबंधित करने के बारे में एक राय है जो एकाधिक डेवलपर्स के लिए आम है?
धन्यवाद, splintor
खैर, ViewModels को रिबन के बारे में कुछ भी "पता" नहीं होना चाहिए। उन्हें रिबन में क्या दिखाना है और प्रदर्शित नहीं किया जाना चाहिए। यह देखने के लिए कि व्यू और क्या नहीं दिखाना है, व्यू व्यूमोडेल के राज्य परिवर्तनों का जवाब देना चाहिए। – Will
इसका मतलब क्या है "रिबन पुनर्निर्माण"? यदि आपके पास अलग-अलग विचारों के लिए अलग-अलग रिबन हैं, तो यह अच्छा अभ्यास नहीं है, क्योंकि रिबन केवल एक होना चाहिए। आपका सहयोगी सही है। और मैं रिबन को बदलने के लिए केवल एक डेवलपर को अनुमति दूंगा। – vorrtex
यह एक टैबबड एप्लिकेशन है, जिसमें कई टैब प्रकार होते हैं - प्रत्येक प्रकार के अपने रिबन कमांड होते हैं। रिबन में सभी वस्तुओं को रखने के बजाय, मैंने सोचा कि टैब के परिवर्तन आसान होने पर प्रासंगिक वस्तुओं के साथ रिबन सामग्री का पुनर्निर्माण करना आसान होगा। आप जो कहते हैं उसके विपरीत, मेरे सहयोगी का कहना है कि हर कोई मुख्य रिबन फाइलों में अपना हिस्सा संपादित करता है, क्योंकि प्रत्येक डेवलपर जानता है कि वह अपनी रिबन वस्तुओं को कैसे देखना चाहती है। मुझे वास्तव में दो बड़ी फाइलें रखने का विचार पसंद नहीं है जो पूरे एप्लिकेशन और इसकी स्क्रीन के बारे में ज्ञान को केंद्रित करते हैं - यह एक बड़ा एप्लीकेशन है और हमें इसे यथासंभव विघटित करने की आवश्यकता है। – splintor