मैंने एमवीसी के बारे में कई प्रकाशन पढ़े हैं, लेकिन मैं अभी भी स्पष्ट रूप से समझ नहीं पा रहा हूं कि हमें "नियंत्रक" की आवश्यकता क्यों है।एमवीसी: हमें "नियंत्रक" की आवश्यकता क्यों है, या हमें इस पैटर्न का उपयोग कब करना चाहिए?
मैं आमतौर पर में क्लाइंट-सर्वर मॉडल अनुप्रयोग लिखने:
सर्वर सभी व्यापार-तर्क होता है, और यह जीयूआई बारे में कुछ नहीं जानता है। यह मुख्य काम करता है, और यह यथासंभव पोर्टेबल है।
ग्राहक एक जीयूआई है, यह सर्वर को बांधता है, उपयोगकर्ता के साथ सूचना का आदान प्रदान, उपयोगकर्ता से सर्वर को आदेश भेजता है।
मैं इस वास्तुकला की तरह, और मैं समझ नहीं क्यों लोग वास्तव में, ग्राहक और सर्वर के बीच एक और मध्यम की ज़रूरत है जो नियंत्रक होने लगते हैं?
यूपीडी: सरल उदाहरण: मान लें कि हमें कुछ डेटा लॉगर लिखने की आवश्यकता है। डेटा COM पोर्ट से आता है, यह कुछ प्रोटोकॉल द्वारा एन्कोड किया जाता है। एक साधारण लॉग विंडो में प्राप्त संदेश दिखाने की आवश्यकता है।
Data_receiver
:सर्वर निम्न आइटम शामिल हैं:
मैं इसे कैसे होगा वास्तव में COM पोर्ट से कच्चे डेटा प्राप्त करता है, लेकिन यह इंटरफेस है, इसलिए हम कुछ करने में सक्षम हैं एक और वर्ग जो किसी अन्य स्रोत से डेटा प्राप्त करता है;
Data_decoder
: कच्चे डेटा लेता है और परिणामस्वरूप डीकोड किए गए संदेश लौटाता है, यह इंटरफेस भी है, इसलिए हम आसानी से एन्कोडिंग प्रोटोकॉल बदल सकते हैं;Data_core
:Data_receiver
औरData_decoder
के उदाहरणों का उपयोग करके, ग्राहकों को सिग्नल उत्सर्जित करता है।
ग्राहक निम्न आइटम शामिल हैं:
- Appl कोर: बनाता है
Data_receiver
(एक COM पोर्ट से कनेक्ट होता है),Data_decoder
औरData_core
(जोData_receiver
औरData_decoder
उदाहरणों के लिए संदर्भ लेता है) के कहने , जीयूआई सरल लॉग विंडो भी बनाता है (जोData_core
का संदर्भ लेता है); - जीयूआई सरल लॉग विंडो:
Data_core
से बांधता है, यानी इसके द्वारा उत्सर्जित सिग्नल के लिए सुनता है, और प्राप्त डेटा प्रदर्शित करता है।
के रूप में मैं समझ गया कि मैं क्या MVC के बारे में पढ़ा है, जीयूआई नहीं वास्तव में प्राप्त हुए संदेशों का Data_core
से ले क्योंकि नियंत्रक कि क्या करना चाहिए और उसके बाद जीयूआई को डेटा पास जाना चाहिए। लेकिन क्या खराब चीजें होती हैं यदि जीयूआई इस डेटा को सीधे मॉडल से लेता है?
मुझे यह प्रश्न पसंद है, सिर्फ इसलिए कि किसी ने भी "आप इसे गलत कर रहे हैं" जवाब दिया है। इसका मतलब है कि समुदाय को बड़े पैमाने पर इस सवाल का जवाब नहीं है (संभावना नहीं है), या एमवीसी और एमवीवीएम उस बिंदु पर ओवरप्लेड हैं जहां आपके जैसे व्यक्ति सोचते हैं कि वे * आवश्यक * हैं, वास्तव में, कभी-कभी, वे कभी-कभी प्राप्त कर सकते हैं वैसे, और कोड पठनीयता से दूर ले लो। –
इसके अतिरिक्त, एमवीवीएम और एमवीसी जैसे पैटर्न * पैटर्न * हैं। इसका मतलब है कि जब आप SOLID कोड लिख रहे हों तो वे आपके कोड में * दिखाई देंगे। दूसरे शब्दों में, यदि आप सॉलिड कोड लिख रहे हैं, और पैटर्न दिखाई नहीं दे रहे हैं, तो संभवतः आप ऐसे कोड लिख रहे हैं जिन्हें इन पैटर्न की आवश्यकता नहीं है। –
इसके अलावा, आपके उदाहरण में, आपके क्लाइंट और आपके सर्वर दोनों में नियंत्रक कोड है। उदाहरण: एक टेक्स्ट फ़ील्ड केवल एक टेक्स्ट फ़ील्ड है। उस पाठ फ़ील्ड पर लागू प्रमाणीकरण तर्क * नियंत्रक * कोड है। यदि आप स्वयं को उस सत्यापन तर्क को दोहराते नहीं पाते हैं, तो संभवतः आप एक DRY तरीके से कोड लिख रहे हैं, जिसे एक पूर्ण "नियंत्रक" वर्ग की आवश्यकता नहीं है। दूसरी तरफ, यदि आपके पास दोनों टेक्स्ट फ़ील्ड में एक ही काम कर रहे हैं (उन्हें पूर्णांक में परिवर्तित करना, सुनिश्चित करना कि वे 1-100 के बीच हैं), तो आप टेक्स्टफील्ड को उप-वर्गीकरण और नियंत्रक तर्क जोड़ने पर विचार करना चाहेंगे। –