2010-08-09 15 views
5

पर फॉर्म .ShowDialog() कोड को रिफैक्टरिंग मेरे पास WinForm और कुछ गुण हैं जो इस पर सेट हैं।
उदाहरण के लिए: नाम, पता फॉर्म पर स्वीकार किया जाता है।
(वास्तविक उदाहरण में कई और अधिक गुण)एमवीपी

वर्तमान कार्यान्वयन कुछ हद तक

frmName frmView = new frmName(); //frmName is WINFORM 
frmView.Name= "ABC"; //any valid string or read this from file 
frmView.Address="SomeAddress"; //any valid address or read this from file 

if (frmView.ShowDialog() == DialogResult.OK) 
{ 
    //OK CLICK PROCESS and 
    // get new values edited by user 
    string name = frmView .Name; 
    string address = frmView.Address; 
    doProcessing(name,address); 
} 
else{ 
    //Ignore cancel click.. 
} 

के समान है मैं कैसे एक MVP आधारित Winform आवेदन में कनवर्ट कर सकते हैं।
इसके अलावा refactor करने के लिए प्रसंस्करण प्रस्तुतकर्ता/मॉडल
करने पर ShowDialog() किया (पता वह जगह है जहाँ यह करने के लिए) की आवश्यकता है?
भी फॉर्म पर कोड लिखने से बचने की आवश्यकता है। (निष्क्रिय दृश्य)

धन्यवाद सब।

उत्तर

5

मैं अभी भी अलग एमवीपी के साथ प्रयोग कर रहा हूँ अपने आप को पास जाते है, लेकिन जिस तरह से मैं वर्तमान में यह कर रहा हूँ इसलिए की तरह है:

frmName frmView = new frmName(); 

if (frmView.ShowDialog() == DialogResult.OK) { 
    presenter.RequestProcessing(frmView.Name, frmView.Address); 
} else { 
    //Ignore cancel click.. 
} 

आप कहते हैं कि आप प्रपत्र पर ही किसी भी कोड लिखने से बचना चाहते हैं, लेकिन यह मुझे समझ में नहीं आता है। Passive View में, आप नियंत्रक या प्रस्तुतकर्ता को एप्लिकेशन-विशिष्ट अनुरोध पर भेजते हैं।

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

कुछ परिस्थितियों में जहां मुझे संवाद बॉक्स में त्रुटियों को संभालने में सक्षम होना आवश्यक है, मैंने IPresenter ऑब्जेक्ट को संवाद बॉक्स के निर्माता में पास कर दिया है। इसके बाद "ठीक" बटन क्लिक होने पर उचित प्रस्तुतकर्ता अनुरोध स्वयं कर सकता है, उदाहरण के लिए, और किसी त्रुटि के मामले में बंद होने के बजाय संदेश बॉक्स दिखा सकता है।

एमवीपी पर बहुत सारे बदलाव हैं, लेकिन मुझे उम्मीद है कि इससे मदद मिलती है। इसे स्थापित करने के साथ शुभकामनाएँ। उत्तर के लिए

+0

thx। कृपया आप त्रुटियों के भाग को संभालने की व्याख्या भी कर सकते हैं .. (तीसरा अनुच्छेद .. "कुछ परिस्थितियों में जहां ....") – Amitd

+0

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

+0

@Rich: ओह ठीक है। तो मुझे दृश्य के अंदर नए प्रस्तुतकर्ता बनाने के बजाय प्रस्तुतकर्ता को दृश्य की संपत्ति के रूप में रखने की आवश्यकता होगी? – Amitd

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