2008-12-09 18 views
5

मैं अब एमवीपी पैटर्न को पूरी तरह से समझता हूं, लेकिन मैं अभी भी यह देखने के लिए संघर्ष करता हूं कि विचार और प्रस्तुतियां तत्काल हैं। मैंने कुछ उदाहरण देखे हैं जहां प्रस्तुतकर्ता दृश्य में नया है, लेकिन यह सही है। व्यू और प्रेजेंटर के बीच संवाद करने के बारे में जेरेमी मिलर के ब्लॉग पोस्ट को पढ़ने के बाद प्रेजेंटर को प्रस्तुत करने के लिए प्रस्तुतकर्ता पर एक समारोह था।कहां और प्रस्तुतकर्ता का जन्म होना चाहिए

मेरा प्रश्न यह है: विचारों और प्रस्तुतियों को कहां बनाया जाना चाहिए? Winforms और webforms में भी।

उत्तर

3

वेबफॉर्म में, पृष्ठ अनुरोध द्वारा तत्काल हो जाता है। चूंकि पृष्ठ दृश्य है और आप निष्पादन के आदेश को नियंत्रित नहीं कर सकते हैं, यह वह दृश्य है जिसे प्रस्तुतकर्ता

+1

Winforms के बारे में क्या? – adriaanp

2

विनफॉर्म में, मैं आवश्यकतानुसार दृश्य को तुरंत चालू करता हूं (उदाहरण: main विधि में, या में एक अन्य प्रस्तुति पर एक विधि, लेकिन जहां भी वास्तव में समझ में आता है)। दृश्य तब प्रस्तुतकर्ता के नए उदाहरण के साथ स्वयं को बनाता है और पंजीकृत करता है।

इससे कई विचारों को एक ही प्रस्तुतकर्ता तर्क का उपयोग आसान बनाता है, और एमवीपी का उपयोग करने के लिए मेरे विशेष वास्तुशिल्प निर्णय से मेरे विचार के उपयोगकर्ताओं को ढालता है।

+0

तो, आपका मतलब है कि आपका प्रस्तुतकर्ता ठोस दृश्य के बारे में जानेंगे? – Samnang

+1

नहीं। प्रस्तुतकर्ता के पास केवल एक इंटरफ़ेस के माध्यम से दृश्य का संदर्भ है जो दृश्य लागू करता है। यह प्रस्तुति को देखने के कार्यान्वयन से प्रस्तुत करता है, और यूनिट परीक्षण प्रस्तुतकर्ता तर्क बहुत आसान बनाता है क्योंकि आप परीक्षण के लिए नकली दृश्य का उपयोग कर सकते हैं। –

+0

यदि आप किसी अन्य प्रस्तुतकर्ता पर किसी विधि में आवश्यक दृश्य को तुरंत चालू करते हैं, तो निश्चित रूप से प्रस्तुतकर्ता को ठोस दृश्य के बारे में पता होना चाहिए? –

1

सबसे अच्छा सवाल है। दूसरा, इससे कोई फर्क नहीं पड़ता, बहुत कुछ। मेरी निजी वरीयता लगभग हमेशा प्रस्तुतकर्ता को तार और दृश्य में देखें।

public class SomePresenter 
{ 
    public ShowContactView(IContactView view) 
    { 
     IContact model = new Contact(); 
     new ContactPresenter(model, view); 
     view.Show(); 
    } 
} 

public class AnotherPresenter 
{ 
    public ShowContactView(IContactView view) 
    { 
     IContact model = new Contact(); 
     new ContactPresenter(model, view); 
     view.Show(); 
    } 
} 

public class YetAnotherPresenter 
{ 
    public ShowContactView(IContactView view) 
    { 
     IContact model = new Contact(); 
     new ContactPresenter(model, view); 
     view.Show(); 
    } 
} 

public partial class ContactView : Form, IContactView 
{  
    public ContactView() 
    { 
     InitializeComponent(); 
    } 
} 
इस के लिए

:

इस परिदृश्य की तुलना करें

public class SomePresenter 
{ 
    public ShowContactView(IContactView view) 
    { 
     view.Show(); 
    } 
} 

public class AnotherPresenter 
{ 
    public ShowContactView(IContactView view) 
    { 
     view.Show(); 
    } 
} 

public class YetAnotherPresenter 
{ 
    public ShowContactView(IContactView view) 
    { 
     view.Show(); 
    } 
} 

public partial class ContactView : Form, IContactView 
{  
    public ContactView() 
    { 
     InitializeComponent(); 

     new ContactPresenter(new Contact(), this); 
    } 
} 

आप देख सकते हैं उत्तरार्द्ध बहुत कम कोड दोहराव है। बेशक यह मूर्खतापूर्ण नकल है या आप कह सकते हैं कि आप साझा कार्यक्षमता में साझा कार्यक्षमता को स्थानांतरित कर सकते हैं, लेकिन आपको बिंदु मिल गया है, यह सिर्फ एक उदाहरण है .. यही वह समय है जब आपके आवेदन के कई हिस्सों में तत्काल दृश्य होना होगा।

इसके अलावा, प्रेजेंटर को देखने के व्यू का लाभ यह है कि आपको केवल अपने व्यू प्रोजेक्ट में प्रेजेंटर को संदर्भित करने की आवश्यकता है, ताकि आप विभिन्न यूआई अनुप्रयोगों में एक ही प्रेजेंटर का पुनः उपयोग कर सकें। अन्यथा आपको प्रेजेंटर में प्रत्येक व्यू प्रोजेक्ट को संदर्भित करने की आवश्यकता होगी ..

लेकिन यह देखना महत्वपूर्ण है कि अलग-अलग मॉडल आपके मामले में कैसे फिट होते हैं। ईमानदार होने के लिए, there are more possibilities even. See this duplicate question.

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