2012-02-13 16 views
5

में इंटर-कंट्रोलर संचार एमवीसी/एमवीपी में ढीले-युग्मित इंटर-कंट्रोलर संचार के लिए एक अच्छी विधि क्या है?एमवीसी/एमवीपी

उदाहरण के लिए, एक उद्धरण में, उपयोगकर्ता को नया संपर्क बनाना और जोड़ना होगा, या मौजूदा एक जोड़ना होगा।

वे एक नया संपर्क बनाने का चयन करते हैं। पूरा होने पर, संपर्क को उद्धरण में जोड़ा जाता है, और यूआई उपयोगकर्ता को उस उद्धरण पर वापस कर देता है। अगर वे रद्द कर देते हैं, तो वे उद्धरण पर वापस आ जाते हैं।

मैं कहीं और संपर्क का पुन: उपयोग करना चाहता हूं, इस प्रकार इसे उद्धरण के बारे में कुछ भी नहीं पता होना चाहिए। उदाहरण के लिए, यदि मैं संपर्क सूची से संपर्क बनाता हूं, तो इसे पूरा होने पर वहां वापस जाना चाहिए।

  • ContactsController कार्रवाई ApplicationController.getNextStep (यह) कॉल और ApplicationController ContactsController

  • ContactsController की ओर से अगले कदम के बाहर यह आंकड़े:

    यहां कुछ विकल्प है कि मैं के बारे में सोचा है "actioncomplete" ईवेंट या इसी तरह उठाता है, और एप्लिकेशन कंट्रोलर इस घटना के लिए सुन रहा है, और सही अगले चरण

  • उद्धरण नियंत्रक अगले कदम के साथ ContactsController करने के लिए "लाठी" है, जो ContactsController जब

  • ContactsController को जन्म देती है "actioncomplete" घटना या इसी तरह से किया है, और QuotesController इस घटना के लिए सुन रहा है कहता है, और सही अगले कदम के कॉल में गुजरता है।

क्या आपके पास इनके साथ अनुभव है? अन्य विचार? जो एक बड़े ऐप में सबसे कम सिरदर्द का कारण बन जाएगा?

धन्यवाद!

उत्तर

1

मान लीजिए कि मैं अपने प्रश्न का उत्तर दूंगा। उम्मीद है कि, मुझे वह मीठा, मीठा बक्षीस मिलता है।

इस बारे में अपने सलाहकार कर्मचारी को ग्राहक को भेजने के परिप्रेक्ष्य से इस बारे में सोचें। वह जानता है कि अपना काम कैसे करें, लेकिन वह नहीं जानता कि वह कब खत्म हो जाएगा। आप चाहते हैं कि वह उसके बारे में लचीला रहें जो वह आगे करता है।

कभी-कभी उसका मालिक उसे भेजता है। कभी-कभी सीईओ करता है (वह शायद नहीं जानता कि उसे कहां भेजना है)। कभी-कभी ग्राहक उसे आपात स्थिति में बुलाता है (वह निश्चित रूप से नहीं जानता कि उसे कहां भेजना है)। कभी-कभी वह व्हाइटबोर्ड से एक नया काम पकड़ लेता है।

उन्होंने कई चीजों में से एक कर सकता है:

  • आप उसे बता सकते प्रधान कार्यालय कॉल करने के लिए जब वह किया है, और प्रधान कार्यालय उसके लिए यह पता लगा होगा। उसे किसी भी अन्य लोगों के बारे में जानने की ज़रूरत नहीं है, केवल हेड ऑफिस फोन नंबर।

  • आप उसे बता सकते हैं कि वह समाप्त होने से पहले क्या करना है, उसे छोड़ने से पहले। अगर वह थोड़ी देर के लिए चला गया है, तो उसके बाद का अगला कार्य बदल गया होगा।

  • आप उसे फेसबुक पर पोस्ट करने के लिए कह सकते हैं जब वह पूरा कर लेता है, हेड ऑफिस इसकी तलाश करेगा, और उसे बताएगा कि क्या करना है। हेड ऑफिस को अपने सभी सलाहकारों से कई फेसबुक पोस्ट देखने की आवश्यकता होगी।

  • आप अपने पर्यवेक्षक को अपने कॉल का जवाब देने के लिए कह सकते हैं, लेकिन उसके पर्यवेक्षक को कार्यालय में होना चाहिए, और शायद वह पर्यवेक्षकों को स्विच करेगा।

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

यह परामर्शदाता को कॉल करने के लिए अगले ग्राहक की संख्या देने के बराबर होगा, जब वह किया जाता है। अगर उसे कोई संख्या नहीं मिलती है, तो वह हेड ऑफिस को बुलाता है।

आप एक ईवेंट का भी उपयोग कर सकते हैं, और यह एक बुरा विचार नहीं है। एकमात्र मुद्दा यह हो सकता है कि इस घटना के लिए कई ऑब्जेक्ट्स सुन रहे हैं, कुछ अनजान हो सकता है।

1

आप नेविगेशन स्टैक के कुछ रूप को कार्यान्वित कर सकते हैं, जहां उद्धरण या संपर्क नियंत्रकों को पहले इसमें धक्का दिया जाता है, और फिर जब आवश्यक हो तो वे संपर्क नियंत्रक को इसमें धक्का देते हैं। जब संपर्क नियंत्रक किया जाता है, तो यह जानने के लिए कि यह कहां जाना है, यह स्वयं को बंद कर देता है। इस तरह यह पूरी तरह से decoupled है और हर जगह फिर से इस्तेमाल किया जा सकता है, और nested एन-स्तर गहरा हो सकता है।

1

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

कॉलबैक फ़ंक्शन का आपका विचार बहुत अच्छा है, लेकिन मैं एक कदम आगे जाऊंगा और इसे Func <> बना सकता हूं, जिससे आप बंद करने का उपयोग कर सकते हैं। मैं आपके सलाहकार रूपक पर विस्तार करूंगा: अपने प्रतिनिधि को फ़ोन नंबर पास करने के बजाय, उसे कार्यालय में वापस कनेक्ट करें और वहां से निर्देश प्राप्त करें। बंद करने का उपयोग करने की सुंदरता यह है कि आप कोड से सीधे कॉलिंग संदर्भ तक पहुंच सकते हैं अन्यथा दायरे से बाहर; दूसरे शब्दों में, बंदरगाह नियंत्रक में चर और कार्यों के सभी तक पहुंच सकते हैं।

अपने विक्रेता अपने कार्य के साथ किया जाता है, वह केवल अपने ब्रीफकेस (Func <>) को खोलता है और देखने के लिए अगर किसी को उनके कार्यालय दराज में एक टू-डू आइटम डाल दिया कार्यालय पर अपनी मेज में पहुंचता है।

जॉन स्कीट (स्टैक ओवरव्लो पर भी) का यहां एक महान संसाधन है: http://csharpindepth.com/articles/chapter5/closures.aspx