2009-04-13 11 views
8

में .NET आरआईए सेवाओं और एमवीवीएम का संयोजन करते समय सिल्वरलाइट 3.0 में .NET RIA सेवाओं और एमवीवीएम का उपयोग करते समय आरआईए सेवाओं से मेटाडेटा प्रकार और एमवीवीएम पैटर्न से व्यूमोडेल के बीच कोई अंतर होता है? क्या ये वही बात हैं या उन्हें अलग रखना चाहिए?सिल्वरलाइट 3.0

मेटाडाटा प्रकार आंशिक इकाई वर्ग में एक सीलबंद आंतरिक वर्ग है। वहां उचित पृथक्करण प्रतीत नहीं होता है लेकिन मेटाडाटा प्रकार को सत्यापन के गुणों के साथ भी सजाया जा सकता है जो इसे व्यूमोडेल की तरह दिखता है।

मैंने चारों ओर खोज की है लेकिन मुझे कुछ भी नहीं देखा जो इस बारे में किसी भी विवरण में बात करता है।

उत्तर

11

चकजे के साथ सहमत - आम तौर पर डोमेनकॉन्टेक्स्ट दृश्य मॉडल का हिस्सा बनता है। उदाहरण के लिए, कहें कि मेरे पास एक खोज पृष्ठ था जिसने उत्पाद सूची के विरुद्ध खोज की अनुमति दी थी।

class Catalog : DomainService { 
    IQueryable<Product> GetProducts(string keyword) { ... } 
} 

उत्पन्न DomainContext:

सर्वर पर:

class Catalog : DomainContext { 
    EntityList<Product> Products { get; } 
    void LoadProducts(string keyword); 
} 

दृश्य मॉडल मैं लिखने होगा: यहाँ कैसे मैं चीजों की संरचना होता है

class SearchViewModel { 
    Catalog _catalog = new Catalog(); 

    public IEnumerable<Product> Results { 
     get { return _catalog.Products; } 
    } 

    public void Search(string keyword) { 
     _catalog.Products.Clear(); 
     _catalog.LoadProducts(keyword); 
    } 
} 

और फिर आखिर में मेरे एक्सएमएल में, मैं अपने UserControl के DataContext को SearchViewModel का उदाहरण बनने के लिए सेट करता था, और एक आइटमकंटर बांधता था परिणाम संपत्ति के लिए ओएल। मैं एक बटन को बाध्य करने के लिए अपनी पसंद के व्यूमोडेल पैटर्न का उपयोग करना चाहता हूं (जो प्रभावी रूप से एक कमांड है जो SearchViewModel खुलासा करता है)।

<Button Content="Search" 
    fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" /> 

और के रूप में शुरू here दिखाया गया है: मैं व्यक्तिगत रूप से कुछ है कि मैं के रूप में Silverlight.FX के साथ काम किया है की तरह है।

चक का उल्लेख है कि मेरे पास वास्तव में मेरे दृश्य मॉडल में अन्य राज्य हो सकता है, उदाहरण के लिए, चयनित उत्पाद जो मेरे xaml में लिस्टबॉक्स के चयनित इटैम से दो-तरफा हो सकता है, और फिर उसी चयनित उत्पाद को डेटाकॉन्टेक्स्ट के रूप में बांध सकता है एक चयनित उत्पाद के विवरण दिखाने के लिए एक डेटाफॉर्म।

आशा है कि मदद करता है! मैं इसके बारे में कुछ और blog पर जल्द ही ब्लॉगिंग करूँगा।

+0

पिछले हफ्ते में कुछ विचारों के बाद मुझे लगता है कि मैं यही सोच रहा था। DomianContext पूर्ण ViewModel नहीं है लेकिन इसका एक हिस्सा है।डोमेन सेवा (जैसे [आवश्यक]) के मेटाडेटा टाइप में परिभाषित गुणों को व्यूमोडेल में फिर से देखना होगा या तथ्य यह है कि डोमेन कॉन्टेक्स्ट सत्यापन इंजन द्वारा पिकअप के लिए पर्याप्त व्यूमोडेल का हिस्सा है? –

+0

विषय के निखिल के ब्लॉग पोस्ट के लिए लिंक: http://www.nikhilk.net/Entry.aspx?id=229 –

+0

[आवश्यक] आदि मेटाडाटा गुण इकाई प्रकार पर कर रहे हैं - दृश्य ही मॉडल पर नहीं। यदि आप दृश्य मॉडल से उदाहरण के उदाहरण का पर्दाफाश करते हैं तो वे उठाए जाएंगे (उदाहरण के लिए उपरोक्त दृश्य मॉडल नमूने में उत्पाद)। –

1

आरआईए सेवाओं के डेटा संदर्भ को एमवीवीएम पैटर्न में व्यूमोडेल की भूमिका निभाने के लिए डिज़ाइन किया गया था क्योंकि वे मूल रूप से डेटा बाइंडिंग का समर्थन करते हैं, लेकिन वे उस शब्द का उपयोग उनके दस्तावेज़ में नहीं करते हैं। हालांकि, यह वास्तव में निर्भर करता है। आरआईए डेटा संदर्भ जैसे आदेशों और अन्य दृश्य संबंधित राज्यों की तुलना में आपको शायद अपने दृश्य मॉडल में राज्य की आवश्यकता होगी। मुझे लगता है कि आप क्या करना चाहते हैं, दृश्य मॉडल के हिस्से के रूप में आरआईए सेवाओं से डेटा संदर्भों का उपयोग करना है।

+0

जितना अधिक मैं इसे देखता हूं, मुझे लगता है कि मैं EntityObject और इसके मेटाडेटा टाइप को जितना संभव हो छुपाना चाहता हूं। मुझे लगता है कि आप सही हैं कि मैं शायद ViewModel में DataContext चाहता हूं लेकिन मैं EntaObject से मेटाडेटा आंतरिक कक्षा को हटाना चाहता हूं और इसे ViewModel पर ले जाना चाहता हूं। सही बात? –

+0

रुको। यह या तो सही नहीं लगता है। मुझे लगता है कि मेटाडेटा क्लास को सर्वर पर और क्लाइंट पर व्यूमोडेल होना चाहिए। ओह। शायद ViewModel साझा कोड के रूप में आता है? –

+0

समीक्षा के बाद आज सुबह जवाब दिया गया मुझे अंत में एहसास हुआ कि आपने इस प्रश्न का उत्तर दिया है। हाय चक, लंबे समय से नहीं देखते हैं। आशा है कि जीवन आपको अच्छी तरह से इलाज कर रहा है। –