2009-08-17 13 views
5

मैंने कुछ एमवीवीएम आधारित WPF कोड विकसित किए हैं और मुझे कुछ मामूली रिफैक्टरिंग की आवश्यकता है लेकिन ऐसा करने से पहले मुझे सर्वोत्तम आर्किटेक्चर का निर्णय लेने की आवश्यकता है।एमवीवीएम पैटर्न और अर्ध-वैश्विक डेटा

मूल रूप से मैंने एक ऐसे एप्लिकेशन से शुरुआत की जो मेरे डेटा के कई समान (लेकिन अलग) प्रस्तुतिकरण प्रस्तुत कर सके। आइए इसे RecordsViewModel पर कॉल करें जिसमें RecordsView संबंधित था। समय बीतने के बाद, मैंने SettingsViewModel पेश किया जो RecordsViewModel के निर्माता में पारित किया गया था और स्पष्ट रूप से प्रकाशित किया गया था (इसे उपयोग करने के लिए RecordsView की अनुमति देता है)। SettingsViewModel पंजीकृत है ताकि मेरे सभी विचारों में परिवर्तन दिखाई दे सकें।

अब मैं RecordsView को थोड़ा विभाजित करना चाहता हूं क्योंकि इसमें अब दो अलग-अलग विचार हैं।

समस्या मैं है:

  • नई (RecordsMainView और RecordsAlternativeView) दोनों सेटिंग देखना चाहते हैं।
  • पहले RecordsView के विपरीत जो प्रोग्रामेटिक रूप से तत्काल है, इन नए विचारों को Xaml (डिफ़ॉल्ट कन्स्ट्रक्टर) से तुरंत चालू किया जाता है।

    1. चलो ट्री मॉडल ऊपर की तरफ एक सेटिंग
    2. साथ एक माता पिता सेटिंग्स नियंत्रण पर एक DependencyProperty बनाने को खोजने के लिए और Xaml बनाने के लिए संपत्ति में शामिल होने:

तो मेरे विकल्प होने लगते हैं उदाहरण।

  • SettingsViewModel सिंगलटन बनाएं।
  • कोई अन्य, बेहतर, विकल्प? आप किस पर सबसे अच्छा विचार करेंगे?

    उत्तर

    3

    मैं आपकी सेटिंग्स लॉजिक को एक सेवा (ISettingsService) में बदल दूंगा और उस सेवा को प्राप्त करने के लिए सेवा लोकेटर या निर्भरता इंजेक्शन का उपयोग कर सकता हूं, जो भी मॉडल को इसकी आवश्यकता है।

    सेवाएं साझा राज्य के प्रबंधन के लिए बहुत अच्छी हैं, और सेवा लोकेटर/DI आपके वीएम के लिए सेवा का संदर्भ प्राप्त करना बहुत आसान बनाता है। एक वीएम में साझा स्थिति संग्रहीत करना थोड़ा हैकी है - और जैसा कि आपने पाया है - वास्तव में स्केल नहीं करता है। अंगूठे का एक अच्छा नियम खुद से पूछना है कि क्या वीएम में राज्य केवल इसी दृश्य का समर्थन करने के लिए मौजूद है, या अन्य घटकों को उस राज्य तक पहुंच की आवश्यकता होगी या नहीं। यदि उत्तरार्द्ध, इसे एक सेवा में ले जाएं।

    संबंधित मुद्दे