प्रश्न का उत्तर देने के लिए, हां, प्रत्येक दृश्य का अपना दृश्य मॉडल होना चाहिए। लेकिन पूरे पदानुक्रम को मॉडल करने की आवश्यकता नहीं है। केवल दृश्य की आवश्यकता है।
MVVM के बारे में सबसे अधिक ऑनलाइन संसाधनों के साथ मुझे जो समस्या थी:
अधिकांश उदाहरणों में, दृश्य मॉडल का लगभग 1 से 1 मैपिंग है। लेकिन मेरे परिदृश्य में, जहां एक ही मॉडल के विभिन्न पहलुओं के लिए अलग-अलग विचार हैं, मैं खुद को दो विकल्पों के बीच फंसा हुआ पाता हूं:
एक अखंड दृश्य मॉडल जो अन्य सभी दृश्य मॉडल द्वारा उपयोग किया जाता है
या प्रत्येक दृश्य के लिए एक दृश्य मॉडल
लेकिन दोनों आदर्श नहीं हैं।
मॉडल-उन्मुख दृश्य मॉडल (एमवीएम), जबकि कोड दोहराव में कम है, बनाए रखने के लिए एक बुरा सपना है
व्यू-ओरिएंटेड व्यू मॉडल (VVM) प्रत्येक दृश्य के लिए अत्यधिक-विशिष्ट कक्षाएं बनाता है, लेकिन इसमें डुप्लिकेट शामिल हैं।
अंत में, मैंने फैसला किया कि प्रति दृश्य एक वीएम रखना और बनाए रखना आसान है, इसलिए मैं वीवीएम दृष्टिकोण के साथ गया।
एक बार कोड काम कर रहा है, मैंने सभी सामान्य गुणों और परिचालनों को उसके वर्तमान, अंतिम रूप में बदलना शुरू कर दिया है:
इस अंतिम रूप में, प्रत्येक VVM में सामान्य दृश्य मॉडल वर्ग की रचना की जाती है।
बेशक, मुझे अभी भी तय करना है कि क्या आम / विशेष माना जाता है। और जब कोई दृश्य जोड़ा / विलय / हटाया जाता है, तो यह संतुलन बदल जाता है।
लेकिन इसके बारे में अच्छी बात यह है कि मैं अब सदस्यों को आम से लेकर वीवीएम तक और इसके विपरीत आसानी से धकेलने में सक्षम हूं।
और वस्तुओं को सिंक में रखने के बारे में एक त्वरित टिप्पणी:
कॉमन व्यू मॉडल होने से इस सबसे ध्यान जाता है। प्रत्येक VVM में समान कॉमन व्यू मॉडल का संदर्भ हो सकता है।
मैं भी सरल कॉलबैक विधियों के साथ शुरू करते हैं, और कई श्रोताओं की आवश्यकता उत्पन्न होने पर घटना / पर्यवेक्षक के लिए विकसित हो रहे हैं।
और वास्तव में जटिल घटनाओं (यानी, अप्रत्याशित कैस्केडिंग अपडेट) के लिए, मैं एक मध्यस्थ का उपयोग करने के लिए स्विच करूंगा।
मैं उस कोड से दूर नहीं भागता जहाँ एक बच्चे के पीछे उसके माता-पिता का संदर्भ होता है। कोड काम करने के लिए कुछ भी।
और अगर रिफ्लेक्टर का अवसर पैदा होता है, तो मैं इसे ले जाऊंगा।
मैंने जो सबक सीखा:
- अग्ली / वर्किंग कोड> ब्यूटीफुल / नॉन-वर्किंग कोड
- कई छोटी कक्षाओं को मर्ज करना आसान है, इससे बड़ी कक्षा को तोड़ना है