मैं एक सरल अनुप्रयोग बनाने के लिए डब्ल्यूपीएफ और एंटिटी फ्रेमवर्क के साथ एमवीवीएम डिजाइन पैटर्न का उपयोग करने की कोशिश कर रहा था। कक्षाएं कमजोर युग्मित होने पर सभी अच्छी और अच्छी हो जाती हैं, लेकिन अगर मेरे पास sth है। दो मॉडल वर्गों की तरह: ग्राहक और पता और ग्राहक के पास पते का संग्रह होता है।एमवीवीएम, संग्रह और ओआरएम
अब उन वर्गों के लिए मुझे दो वीएम कक्षाएं - ग्राहकVM और पताVM बनाने की आवश्यकता है। ग्राहकVM में पताVM ऑब्जेक्ट्स का अवलोकन करने योग्य चयन होना चाहिए। उन वीएम कक्षाओं में किए गए प्रत्येक परिवर्तन (जिसमें ग्राहक सेवा और पताVM दोनों पर सभी सीआरयूडी संचालन शामिल हैं) को मॉडल कक्षाओं में प्रतिबिंबित करने की आवश्यकता है - यही कारण है कि मैं कोड का एक लूट लिखना समाप्त करता हूं। ObservableCollection की बदली हुई घटना की सदस्यता लेता है और यदि कोई नई वस्तु जोड़ दी जाती है तो मॉडल में एक नई वस्तु जोड़ें ... और इसी तरह ...
इसके साथ क्या करना है? एमवीवीएम का उपयोग करते समय यह सामान्य है? क्या मैं सब ठीक कर रहा हूँ? इस तरह के एक साधारण वर्ग पदानुक्रम के लिए आवश्यक कोड की मात्रा कैसे कटौती करें? क्या कोई ढांचा है जो मूल वीएम कक्षाएं बना सकता है जो पदानुक्रम में अन्य वर्गों के साथ "अच्छा व्यवहार" करता है? कक्षा संबंधों को और अधिक जटिल होने पर क्या करना है?
या इसे सरल रखने के लिए:
कैसे मॉडल संग्रह में वीएम संग्रह में किया बदलाव को प्रतिबिंबित करने के लिए: वहाँ भी एक ही है
Customer1.Adresses.Add(new Address{City="New York"})
:
CustomerVM1.AdressesVM.Add(new AddressVM{City="New York"})
के एक बराबर का कारण होना चाहिए दूसरी तरफ समस्या - दृश्य मॉडल में शामिल किए जाने वाले मॉडल में संग्रह में किए गए परिवर्तनों को कैसे प्रतिबिंबित करना है, लेकिन मुझे पहले में अधिक दिलचस्पी है, क्योंकि इसमें अधिक व्यावहारिक है आवेदन और वीएम ऑब्जेक्ट्स ज्यादातर मामलों में आसानी से बनाया जा सकता है।
एक महान उत्तर के लिए बहुत बहुत धन्यवाद। यह निश्चित रूप से समस्या को हल करने का एक तरीका है, लेकिन आईएमओ जो वास्तव में आपको कम कोड नहीं लिखता है - यह करने के लिए यह क्लीनर तरीका है। फिर भी आपको प्रेजेंटर की आवश्यकता है जो एक और परत है और चीजें जितनी जटिल हो सकती हैं उससे ज्यादा जटिल होती हैं। – kubal5003
कल मैं वीएम कक्षाओं के निर्माण के बजाय "कम" एमवीवीएम की तरह sth करने की सोच रहा था, मैं आंशिक कक्षाओं के उपयोग के माध्यम से मॉडल वर्ग का विस्तार करना चाहता हूं। अब मुझे जिस संपत्ति की आवश्यकता है, उसके लिए मैं एक और बना सकता हूं जो पुराने को encapsulates - जैसा कि एमवीवीएम में है। एक सादे पुराने संग्रह के लिए मैं केवल एक रैपर संग्रह बना सकता हूं जो INotifyCollectionChanged लागू करता है और भंडारण के लिए सादे पुराने संग्रह का उपयोग करता है। आपने इस बारे में क्या सोचा? – kubal5003
एक और चीज जिसे मैं सोच रहा था शायद माईकोलेक्शन <वीएमसीएलएएस, एमसीएलएएस> -> जैसे सामान्य संग्रह बनाना है, यह मॉडल <-> व्यूमोडेल इंटरैक्शन के बारे में आवश्यक सब कुछ जानना चाहिए और प्रस्तुतकर्ता में जो कुछ भी आप करते हैं उसे संभालने में सक्षम होना चाहिए। अगर अच्छी तरह से लिखा जाता है तो इसे हर जगह पुन: उपयोग किया जा सकता है। – kubal5003