विंडोज फॉर्म के साथ एमवीसी को लागू करना


102

मैं विंडोज फॉर्म में एमवीसी पैटर्न को पूरी तरह से लागू करने के बारे में एक अच्छा उदाहरण कहां पा सकता हूं?

मुझे विभिन्न साइटों पर कई ट्यूटोरियल और कोड उदाहरण मिलते हैं (उदाहरण के लिए, कोड प्रोजेक्ट और। नेटह्वेन), लेकिन कई MVC की तुलना में पर्यवेक्षक पैटर्न के लिए अधिक प्रतिनिधि हैं। चूंकि मैं जिस एप्लिकेशन को विकसित करना चाहता हूं वह एक स्कूल प्रोजेक्ट के लिए है, मैं PureMVC या MVC # जैसे फ्रेमवर्क का उपयोग करने के लिए अनिच्छुक हूं ।



जवाबों:


115

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

  • सीधे डेटाबेस से बात करें (2 स्तरीय)
  • दिए गए एप्लिकेशन के लिए लिखे गए बैकएंड का उपयोग करें (3 स्तरीय)
  • वेब सेवाओं के एक सेट का उपयोग करें जो कई अनुप्रयोगों द्वारा उपयोग के लिए लिखा गया था और आपके आवेदन के लिए बदला नहीं जा सकता है। (सेवा उन्मुख संरचना)
  • सीआरयूडी संचालन द्वारा किए जा रहे अपडेट
  • कमांड पैटर्न के साथ किए जा रहे अपडेट (बैकएंड सर्वर पर कमांड भेजना)
  • डेटा बाध्यकारी के usages के बहुत सारे / डेटा बाध्यकारी का कोई usages
  • अधिकांश डेटा "टेबल जैसा" (जैसे चालान) जो मानक ग्रिड नियंत्रणों में अच्छी तरह से काम करते हैं / अधिकांश यूआई डेटा के लिए कस्टम नियंत्रण की आवश्यकता होती है।
  • एक डेवलपर / 10 या 20 डेवलपर्स की टीमें (सिर्फ UI पर)
  • मोक्स आदि का उपयोग करके इकाई परीक्षण के बहुत सारे / कोई इकाई परीक्षण नहीं

इसलिए मुझे नहीं लगता कि एमवीसी (या एमवीपी) के एक कार्यान्वयन को बनाना संभव है जो हमेशा अच्छी तरह से फिट बैठता है।

सबसे अच्छा पदों मैंने देखा है वास्तव में समझा MVC और क्यों एक MVC प्रणाली जिस तरह से यह है बनाया गया है, है जेरेमी डी मिलर द्वारा "अपनी खुद की कैब का निर्माण" श्रृंखला । काम करने के बाद हालांकि आपको अपने विकल्पों को बेहतर तरीके से समझने में सक्षम होना चाहिए। Microsoft के स्मार्ट क्लाइंट गाइडेंस (CAB / Microsoft समग्र अनुप्रयोग ब्लॉक) पर भी विचार किया जाना चाहिए। यह थोड़ा जटिल है, लेकिन यह उन अनुप्रयोगों के लिए अच्छी तरह से काम कर सकता है जिनके पास एक अच्छा फिट है।

Winforms प्रोजेक्ट के लिए MVC / MVP कार्यान्वयन का चयन एक अवलोकन देता है जो पढ़ने योग्य है। बहुत सारे लोग PureMVC को पसंद करते हैं । मैंने इसका कभी उपयोग नहीं किया है, लेकिन अगली बार जब मुझे एमवीसी ढांचे की आवश्यकता होगी, तो मैं इसे देखूंगा।

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

"जब मैं 'सेव' बटन पर क्लिक करता हूं तो फाइल को सेव किया जाना चाहिए और बिना सहेजे फाइल चेतावनी गायब हो जानी चाहिए।"

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

अन्य ढेर अतिप्रवाह प्रश्न आप यहाँ और यहाँ देखना चाह सकते हैं

यदि आप किसी भी बिंदु पर WPF का उपयोग करने की सोच रहे हैं तो मॉडल-व्यू व्यूमॉडल (MVVM) पैटर्न पर एक नज़र डालें । यहां एक बहुत अच्छा वीडियो है जिसे आपको देखना चाहिए: मॉडल-व्यू-व्यूमॉडल पर जेसन डोलिंगर

WinVs के लिए MVVM (मॉडल व्यू मॉडल देखें) डिज़ाइन पैटर्न एक और विकल्प देता है जो कभी भी ज़रूरत पड़ने पर WPF में परिवर्तित करने में आसान बना सकता है। Magical.Trevor अभी तक विंडोज फॉर्म के लिए एक और MVVM नमूना है जिसमें संपत्ति के नाम के आधार पर ऑटो बाइंडिंग भी शामिल है।


अपने आप से यह भी पूछें कि आप एमवीसी का उपयोग क्यों कर रहे हैं।

  • क्या आप अधिक से अधिक कोड को इकाई परीक्षण में सक्षम होना चाहते हैं?
  • क्या आप पुन: उपयोग किए जाने के लिए अधिक से अधिक कोड की अनुमति देने का प्रयास कर रहे हैं?
  • क्या आप अपने कोड आधार को समझने में आसान बनाने की कोशिश कर रहे हैं?
  • 101 अन्य कारण जो किसी दिए गए प्रोजेक्ट के लिए मान्य हो सकते हैं।

एक बार जब आप अपने उद्देश्यों पर स्पष्ट हो जाते हैं , तो एक कार्यान्वयन या किसी अन्य को चुनना आसान हो जाता है।


@AgnelKurian, CAB Microsoft का एक नमूना कोड था जो ऐप्स बनाने के तरीके पर था - यह अब ज्यादातर इतिहास है।
इयान रिंगरोज ने

Haha! हां, मुझे अब उन "एप्लिकेशन ब्लॉक" याद हैं।
एगेल कुरियन

45

अद्यतन: नीचे मेरे पिछले जवाब के अलावा, मैं "प्रस्तुतकर्ता प्रथम" दृष्टिकोण (विशेष रूप से पीडीएफ लेख) के बारे में पढ़ने का सुझाव देता हूं

मैं एमवीसी के बजाय एमवीपी (पैसिव व्यू पैटर्न) की सिफारिश करूंगा। आपको इसके लिए वास्तव में किसी विशेष रूपरेखा की आवश्यकता नहीं है, यह सिर्फ यह है कि आप अपने कोड को कैसे व्यवस्थित करते हैं।

एक दृष्टिकोण (जो मैं आमतौर पर लेता हूं) प्रत्येक विंडो फॉर्म को तीन संस्थाओं में विभाजित करना है:

  1. एक प्रस्तुतकर्ता / नियंत्रक वर्ग - यह वह है जो आप वास्तव में एक फॉर्म विकसित करते समय शुरू करते हैं। यह वह जगह है जहां आपके "व्यवसाय" तर्क के अधिकांश / सभी को निवास करना चाहिए।
  2. एक दृश्य इंटरफ़ेस (IView), जिसमें विधियाँ, गुण और घटनाएँ शामिल हैं। यह इंटरफ़ेस वह सब है जो प्रस्तुतकर्ता आपके फॉर्म के बारे में जानता है।
  3. अंत में, जब आप प्रस्तुतकर्ता और दृश्य (इकाई परीक्षण सहित) को लागू करना समाप्त कर लेते हैं, तो आप वास्तविक रूप वर्ग बना सकते हैं और इसे IVIV इंटरफ़ेस लागू कर सकते हैं। फिर यह फॉर्म में उचित नियंत्रण जोड़ने और उन्हें इंटरफ़ेस पर वायरिंग करने का सवाल है।

उदाहरण कोड (चित्रण के लिए एक सरल छद्म कोड):

interface IView
{
    string Username { get; set; }
    string Password { get; set; }

    event EventHandler LogOnButtonClicked;

    void InformUserLogOnFailed();
    void MoveToMainScreen();
}

class Presenter
{
    public Presenter(IView view)
    {
        this.view = view;
        view.LogOnButtonClicked += new EventHandler(OnLogOnButton);
    }

    private void OnLogOnButton()
    {
        // we ask some service to verify the username/password
        bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password);
        if (isLogOnOk)
            view.MoveToMainScreen();
        else
        {
            view.Username = "";
            view.Password = "";
            view.InformUserLogOnFailed();
        }
    }

    private IView view;
}

class Form : IView
{
    public Form()
    {
        presenter = new Presenter(this);
    }

    public string Username
    {
        get { return TextBoxUsername.Text; }
        set { TextBoxUsername.Text = value; }
    }

    public string Password
    {
        get { return TextBoxPassword.Text; }
        set { TextBoxPassword.Text = value; }
    }

    public void InformUserLogOnFailed()
    {
        MessageBox.Show("Invalid username or password.");
    }

    public void MoveToMainScreen()
    {
        // code for opening another form...
    }

    private Presenter presenter;
}

7
यह MVP संस्करण का एक कार्यान्वयन है जिसे PassiveView कहा जाता है। निष्क्रिय दृश्य में दृश्य को अपने प्रस्तुतकर्ता का चयन नहीं करना चाहिए। इसी तरह के उदाहरण के लिए (लेकिन एक दृश्य के साथ निष्क्रिय) इस नमूने की जांच करें danieleteti.it/?p=221 (डेल्फी भाषा में उदाहरण)
डेनियल टेटी

6

क्या आपने PureMVC को देखा है ? मैंने पाया है कि कोई भी इस बात पर सहमत नहीं हो सकता है कि एमवीसी वास्तव में कैसा दिखता है जब वे एक विशिष्ट कार्यान्वयन का निर्माण शुरू करते हैं।

अद्यतन: आप अपने खुद के शुरुआती का निर्माण कर सकते हैं जैसे कि MobileMVC । कॉम्पैक्ट फ्रेमवर्क कोड को विंडोज पर ओके संकलित / चलाना चाहिए। चूंकि यह एक स्कूल असाइनमेंट है, मैं सुझाव दूंगा कि आप वास्तव में MVC वास्तव में कैसे काम करते हैं, यह सीखने में कुछ समय बिताते हैं।


मेरे पास बुकस्टोर का प्रबंधन करने के लिए एक बहुत ही सरल एप्लिकेशन के लिए एक स्कूल असाइनमेंट है, और मैं PureVVC जैसे ढांचे का उपयोग करने के लिए काफी अनिच्छुक हूं। मैं कुछ सरल खोज रहा हूं।
kjv


2

विंडोज फॉर्म का उपयोग करके एमवीसी के अपने स्वयं के कार्यान्वयन को रोल करने का एक अच्छा उदाहरण यहां पाया जा सकता है । स्रोत कोड शामिल है।

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

जब आप स्कूल से बाहर होते हैं तो आप शायद एक ढांचे पर वापस गिरना चाहेंगे जैसे अन्य पोस्टर ने सिफारिश की है।


2

Microsoft समग्र इंटरफ़ेस अनुप्रयोग ब्लॉक ने MVC कार्यान्वयन (इसे लागू किए गए अन्य पैटर्नों के बीच) के रूप में अपना जीवन शुरू किया। हालाँकि, रिलीज़ संस्करण एमवीपी कार्यान्वयन में विकसित हुआ, जिसे एमवीसी अवधारणा की एक अलग व्याख्या के रूप में तर्क दिया जा सकता है।

यदि आप MVP कार्यान्वयन के पूर्ण (और किसी तरह जटिल) कोड की जांच करने के इच्छुक हैं, तो आप MS-CAB को Microsoft स्मार्ट क्लाइंट सॉफ़्टवेयर फ़ैक्टरी के घटकों में से एक के रूप में पा सकते हैं। यह सोर्स कोड के साथ आता है। आप इसे यहाँ पा सकते हैं । सौभाग्य!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.