2009-07-10 7 views
5

मुझे लगता है कि जब मैं एक कंसोल एप्लिकेशन लिखता हूं तो वेब ऐप्स और WinForm ऐप्स लिखना आम तौर पर बहुत साफ हो जाता है।एमवीसी जैसी डिजाइन?

क्लीनर द्वारा मेरा क्या मतलब है? वैसे तथ्य यह है कि तथ्य यूआई (यानी रीडलाइन/राइटलाइन) तर्क कोड के साथ इतनी अंतर्निहित है कि यह भयानक हो जाता है और तथ्य यह है कि घटना संचालित नहीं है इसका मतलब है कि अच्छा अमूर्त होना मुश्किल है।

मैं इस बारे में सोच रहा था और एमवीसी वेब ऐप्स के लिए समान मुद्दों को हल करने का प्रयास करता है, इसलिए मेरा प्रश्न कंसोल ऐप्स के लिए ऐसा कुछ है? या कंसोल ऐप्स में बेहतर डिज़ाइन पाने के लिए कोई गाइड?

उत्तर

10

मुझे लगता है कि आपको लगता है कि मॉडल व्यू कंट्रोलर का एक लोकप्रिय विकल्प मॉडल-व्यू-प्रेजेंटर है। मॉडल मूल रूप से दोनों के बीच समान है। नियंत्रक और दृश्य की भूमिका बहुत समान है, लेकिन आपके कार्यान्वयन के आधार पर उन्हें थोड़ा और ज़िम्मेदारी मिल सकती है। एमवीपी के भीतर, दो कार्यान्वयन विधियां हैं: नियंत्रक और निष्क्रिय दृश्य का पर्यवेक्षण। एमवीपी को आमतौर पर WinForms क्लाइंट के लिए मानक आर्किटेक्चर माना जाता है और इसे वेबफॉर्म पर भी लागू किया जा सकता है। - http://msdn.microsoft.com/en-us/library/cc304760.aspx

  • मार्टिन Fowler निगरानी नियंत्रक पर - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  • मार्टिन Fowler निष्क्रिय देखें पर - http://martinfowler.com/eaaDev/PassiveScreen.html
  • जेरेमी एमवीपी पर एएसपी के लिए मिलर

    एमवीपी पर
    • MSDN: यहाँ अधिक जानकारी के लिए कुछ प्रासंगिक लिंक कर रहे हैं। नेट - http://codebetter.com/blogs/jeremy.miller/archive/2006/02/01/137457.aspx। आप अपनी बिल्ड सीएबी सीरीज़ भी बना सकते हैं। यह एमवीपी सिखाता है क्योंकि यह WinForms पर लागू होता है।
    • निगरानी नियंत्रक पर
    • बहुरूपी पॉडकास्ट स्क्रीनकास्ट - http://polymorphicpodcast.com/shows/mv-patterns/(अत्यधिक की सिफारिश की)

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

  • +0

    मैं वास्तविक हाइपरलिंक की कमी के लिए माफी माँगता हूँ, लेकिन मैं एक नया उपयोगकर्ता हूँ और संख्या है कि मैं पोस्ट कर सकते हैं पर छाया हुआ है। –

    +0

    @ ब्रैड, स्टैक ओवरफ्लो में आपका स्वागत है! मैंने आपकी पोस्ट में हाइपरलिंक्स जोड़े। – CoderDennis

    0

    मॉडल व्यू कंट्रोल एक डिज़ाइन पैटर्न है और यह वेब ऐप्स और कंसोल ऐप्स दोनों पर लागू होता है। शायद आपको सवाल पूछना चाहिए कि आप अपने कंसोल ऐप में एमवीसी कैसे लागू करते हैं।

    सादर

    0

    मुझे लगता है कि आप अभी भी सांत्वना क्षुधा के लिए MVC उपयोग कर सकते हैं।

    याद रखें कि वेब ऐप्स और WinForms में, बहुत से इंटरैक्शन को आप से दूर किया जाता है, लेकिन दृश्य तर्क में अभी भी मौजूद है, उदा। टैब पर क्लिक होने पर कौन से तत्व दिखाना चाहिए।

    यह एक तरह की बातचीत है जिसे आपको स्वयं को कंसोल ऐप में कोड करना है, लेकिन ऐसा कोई कारण नहीं है कि दृश्य के लिए कोड में पूरी तरह से नहीं किया जा सके।

    एमवीसी पर मेरा लेना यह है कि दृश्य सही डेटा, विकल्प इत्यादि को प्रदर्शित करने के लिए पूरी तरह उत्तरदायी है .. उस प्रकाश में, दृश्य में तर्क होने का अपराध नहीं है, जब तक कि तर्क केवल संबंधित है सामान कैसे प्रदर्शित होता है।

    बेशक, अलग-अलग वर्गों में दृश्य को विभाजित करना शायद चीजों को थोड़ा आसान बना देगा (उदाहरण के लिए, आप दृश्य कोड को स्वयं एक एमवीसी पैटर्न में विभाजित कर सकते हैं, हालांकि यह IAppView, IAppViewController जैसी संस्थाओं के साथ वास्तव में जटिल हो सकता है, IAppViewView, आपको बिंदु मिलता है :))।

    3
    सांत्वना आवेदन उदाहरण के लिए MVC

    :

    public interface IController 
    { 
    void RequestView(IView view); 
    
         IView ResponseView(); 
    } 
    
    public interface IView 
    { 
         int GetID { set; get; } 
         void DisplayId(); 
    
    } 
    public interface IModel 
    { 
         int GenrateID(int id); 
    } 
    
    //Business logic in Model 
    public class Model : IModel 
    { 
         public int GenrateID(int id) 
         { 
          id = id * 10; 
          return id; 
         } 
    } 
    
    //Event Logic in Controller 
    public class Controller : IController 
    { 
         private IModel model; 
         private IView responseView; 
         public Controller() 
         { 
          responseView = new View(); 
         } 
    
         public void RequestView(IView view) 
         { 
    
          model = new Model(); 
          responseView.GetID = model.GenrateID(view.GetID); 
         } 
    
         public IView ResponseView() 
         { 
          return responseView; 
         } 
    } 
    //Display Logic in View 
    public class View : IView 
    { 
         public int GetID 
         { 
          get;set; 
         } 
    
         public void DisplayId() 
         { 
          Console.Write(GetID); 
         } 
    } 
    
    class Program 
        { 
         static void Main(string[] args) 
         { 
          IController ctr = new Controller(); 
          int input =int.Parse(args[0]); 
          IView view=new View() 
          { 
           GetID = input 
          }; 
    
          ctr.RequestView(view); 
          view =ctr.ResponseView(); 
          view.DisplayId(); 
         } 
        } 
    
    संबंधित मुद्दे