2011-04-03 11 views
6

लागू करने के लिए मैं एक एमवीवीएम एप्लीकेशन बना रहा हूं। मैं इस तरह अपने आवेदन की संरचना करने के कोशिश कर रहा हूँ:एमवीवीएम और लेयरिंग, सर्विस लेयर

enter image description here

मैं अगर इस दृष्टिकोण MVVM में आम है पता नहीं है। वैसे भी, ViewModel सेवा परत का उपयोग करता है, उदाहरण के लिए मॉडल या अवलोकन योग्य को पॉप्युलेट करना, यह लपेट रहा है।

IService service; 

क्योंकि मैं Linq का उपयोग डेटाबेस क्वेरी करने के लिए, मैं संस्थाओं मेरे डोमेन के रूप में है कि एक ही नाम है: अपनी सेवाओं का उपयोग करने के लिए, ViewModel एक क्षेत्र है कि, सेवा का एक अमूर्त रखती है तो तरह है नाम। ViewModel को सेवा परत/डेटाबेस इकाइयों से अनजान होने दें, मुझे एक लिंक उत्पन्न डेटाबेस इकाई के बजाय एक डोमेन मॉडल वापस देने के लिए सेवा परत की आवश्यकता है। मुझे लगता है कि निम्न कार्य करके (एक कुछ के उदाहरण मैं काम पर पर काम कर रहा हूँ) कार्य करें:

  • यह एक अच्छा है:

    ObservableCollection<ItemTypeViewModel> GetItemTypes() 
    { 
        DataContextLocalDB dc = new DataContextLocalDB(); 
        ObservableCollection<ItemTypeViewModel> itemTypes = new ObservableCollection<ItemTypeViewModel>(); 
    
        foreach (ItemType itemType in dc.ItemTypes) 
        { 
         Models.ItemType type = new Models.ItemType(); 
         type.Name = itemType.Name; 
         type.Description = itemType.Description; 
    
         ItemTypeViewModel itemTypeViewModel = new ItemTypeViewModel(type); 
    
         itemTypes.Add(itemTypeViewModel); 
        } 
    } 
    

    मैं दुखी/को लेकर अनिश्चित हूं चीजों के एक जोड़े हैं एमवीवीएम के साथ संयोजन में संरचना का तरीका?

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

धन्यवाद :-)

उत्तर

2

वहाँ डाटा पुन: बनाने के लिए सिर्फ कोई कारण नहीं है कि ऑब्जेक्ट्स Linq आप के लिए बनाता है। बस उन्हें ViewModel के साथ पास करें, आप ठीक होंगे। ऐसा लगता है कि आपको डोमेन और व्यूमोडेल के बीच एक डिकूप्लिंग बनाना है, लेकिन चूंकि इन संस्थाओं में केवल गुण होते हैं और तर्क नहीं होते हैं, इसलिए उन्हें पास करना ठीक है, और यह प्रोग्राम के लिए भी बहुत आसान होगा ।

बाकी सब कुछ बहुत अधिक वर्तमान है। एकमात्र चीज यह है कि मैं LinqToSQL का उपयोग नहीं करता, बल्कि इसके बजाय EntityFramework का उपयोग नहीं करता। ऐसा लगता है कि एमएस द्वारा केवल एक ही एल 2 एसक्यूएल एक त्याग की बात है।

+0

हाँ, मैं L2SQL के बारे में पता: एक अन्य वर्ग

public partial class ItemType : EntityObject // this is your ViewModel class,this place on another file {// Important: in same namespace public void SomeMethod(){} public ICommand CustomCommand {get{...}} public string CustomProperty{ get{ return localVar;} set{ localVar=value; onPropertyChanged("CustomProperty"); }} } 

अंत में बनाएँ। एंटिटी और डोमेन मॉडल के बारे में, क्या आप कहते हैं कि मैं एक डोमेन मॉडल रखने दे सकता हूं? एमवीवीएम के बारे में कई उदाहरणों में मुझे लगता है कि लोगों के पास एक मॉडल है जो वे वापस लौटते हैं, इस तरह कुछ: 'foreach (this.db.Person में व्यक्ति व्यक्ति) {this.persons.Add (नया व्यक्ति दृश्य देखें (व्यक्ति));', जहां व्यक्ति है एक डोमेन मॉडल, एक इकाई नहीं। व्यक्ति डोमेन मॉडल जैसा कि वे एनीमिक कहते हैं। यदि कोई इकाई के समान है तो उसके पास डोमेन मॉडल क्यों होगा? – TheDude

+0

यह वही है जो मैं कह रहा हूं। क्यों वे किसी भी आवश्यकता के लिए वस्तुओं की नकल कर रहे हैं - उनसे पूछो! ;) –

0
public partial class ItemType : EntityObject //this is your Entity Model 
{ 
    public string Name{get;set;} 
    public string Description{get;set;} 
} 

आप उपरोक्त अनुभाग को संपादित नहीं कर सकते हैं।

यदि आप मॉडल मॉडल द्वारा मॉडल का विस्तार करना चाहते हैं।

public IQueryable<ItemType> GetItemTypes{ 
    get{ 
    DataContextLocalDB dc = new DataContextLocalDB(); 
    return dc.ItemTypes; 
    } 
} 
+0

आपके उत्तर के लिए धन्यवाद! – TheDude

+0

एआरएम, नहीं ...आप आंशिक कक्षा क्यों बना रहे हैं? यह एमवीवीएम नहीं है। ViewModels रैपर होना चाहिए जो मॉडल उदाहरण को कन्स्ट्रक्टर पैरामीटर के रूप में लेते हैं। – Heliac

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