एक नियंत्रक प्रति पृष्ठ या एक नियंत्रक में कई पृष्ठ?


16

मैं सिर्फ चीजों को करने के MVC तरीके के बारे में कुछ सलाह चाहता था। मैं कोडिग्निटर का उपयोग कर रहा हूं और मैं सोच रहा था कि क्या वेबसाइट के लिए प्रति पृष्ठ एक नियंत्रक होना बेहतर है या सभी पृष्ठों के लिए एक नियंत्रक है?

मान लीजिए कि मेरे पास एक सरल वेबसाइट है जहां आप मुखपृष्ठ पर जा सकते हैं, लॉगिन कर सकते हैं, खाता बना सकते हैं और व्यवस्थापक से संपर्क कर सकते हैं।

  1. क्या इन नियंत्रकों का होना बेहतर होगा: फ्रंटएंड (इंडेक्स), लॉगिन, अकाउंट, कॉन्टैक्ट या एक कंट्रोलर जिसे फ्रंटेंड कहा जाता है या जो कुछ भी इस तरह के लॉगिन, createAccount, कॉन्टैक्ट के साथ होता है?

  2. जब आप जानते हैं कि क्या किसी स्थिति में एक नियंत्रक का उपयोग करना बेहतर है?


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

जवाबों:


17

नियंत्रक प्रति तर्क इकाई के लिए बेहतर है, उदाहरण के लिए AccountController (लॉगिन, पंजीकरण), PagesController (घर, संपर्क), Backend -> PagesController (बनाएं, संपादित करें, हटाएं), UsersController (बनाएं, संपादित करें, हटाएं और इत्यादि।


आप theses क्षेत्रों के साथ एक वेबसाइट का प्रतिनिधित्व कैसे करेंगे: घर, लॉगिन, खाता, संपर्क। क्या आप अपने उदाहरण की तरह 2 नियंत्रकों का उपयोग करेंगे? अगर आप लोकलहोस्ट में जाते हैं / यह होमकंट्रोलर खोलते हैं तो अगर आप लोकलहोस्ट / कॉन्टैक्ट में जाते हैं तो कॉन्टैक्ट कंट्रोलर के पास नहीं जाना चाहिए? और बैकएंड से आपका क्या मतलब है?
रशिनो

यह निर्भर करता है कि पृष्ठों की संरचना क्या है और आपके पास कितने पृष्ठ हैं। मैं HomeController (घर, संपर्क) या PagesController (घर, संपर्क या विवरण) (आईडी) बनाऊंगा। उदाहरण के लिए ASP.NET MVC में आपके पास होम और अबाउट पेज के साथ डिफ़ॉल्ट होमकंट्रोलर है।
संता

मुझे यह तरीका पसंद है। इसके अलावा एक क्लाइंटकंट्रोलर (या जो भी आप इसे कॉल करना चाहते हैं) Jquery.Ajax के माध्यम से कॉल किए गए कार्यों के लिए जो आपके आवेदन के किसी विशेष भाग के लिए विशिष्ट नहीं हैं। यानी अपने किसी भी दृश्य से पुन: प्रयोज्य
क्रिस

मेरे लिए सही उत्तर दें। CodeIgniter नियंत्रकों के लिए उप निर्देशिकाओं को स्वीकार करता है जो नियंत्रकों को जोनों में अलग करने में सक्षम बनाता है इसलिए मैं दो पेज कॉन्ट्रोलर (प्रति क्षेत्र में) के साथ समाप्त हो सकता हूं। धन्यवाद!
रशिनो

लेकिन क्या आप कुछ बड़े नियंत्रकों के साथ समाप्त नहीं होंगे, भले ही यह सभी रिश्तेदार हों? या यह कोई मुद्दा नहीं है?
किड डायमंड डायमंड

4

@ रॉशिनो आपके यहां दो 'ऐप' हैं- फ्रंट-एंड (रीडर्स के लिए) और बैकएंड (कमेंट्स के लिए)। कार्यक्षमता के प्रत्येक समूह के लिए, आपके पास एक नियंत्रक है।

लॉगिंग एक ऐसा समूह है, जिसमें एचटीएमएल की पीढ़ी (फ़ील्ड, दृश्य को कॉल करना), और फॉर्म का संचालन (सत्यापन, मॉडल के साथ जुड़ना) शामिल है। तो 'लॉगिन' दो क्रियाओं के साथ एक नियंत्रक है - जनरफ़ॉर्म और हैंडलफ़ॉर्म।

पृष्ठों को फ्रंट एंड ऐप के बीच विभाजित किया गया है - जो केवल पृष्ठ दिखाता है - और बैकएंड ऐप जो संपादन, हटाने, बनाने और संभवतः उन्हें एक अलग तरीके से देखने की अनुमति देता है। होमपेज कम से कम सामने के छोर पर 'सिर्फ एक और पेज' है, इसलिए पेज कंट्रोलर के भीतर फिट बैठता है। बैकएंड पर, इसका तर्क काफी अलग हो सकता है कि यह पूरी तरह से एक अलग नियंत्रक होने को सही ठहराता है।

उपयोगकर्ताओं के लिए - यदि उपयोगकर्ता खुद को पंजीकृत कर सकते हैं, तो उन्हें फ्रंटएंड नियंत्रक की आवश्यकता होगी, लेकिन यदि नहीं, तो उपयोगकर्ताओं के साथ सब कुछ बस बैकएंड में करना होगा।

ध्यान दें कि बैकएंड कार्यों में से प्रत्येक में एक जनरेटर और एक हैंडलर दोनों की आवश्यकता हो सकती है। इन चीजों को कॉन्फिगर फाइल में विभाजित किया जा सकता है, हालांकि, एक प्लगइन के साथ जो कि सामान्य फॉर्म जनरेटर है।

संक्षेप में, यह इस तरह दिखता है:

Frontend
  Pages
    View, Handle
  Login
    View, Handle
  Users
    Register (note that the handler can be the same as 'create' on the backend)
  Contact
    View
    Handle

Backend
  Users
    Create, Delete, Edit, Update, View
  Pages
    Create, Delete, Edit, Update, View

रुको .. आपका यह कहना कि एक खंड एक ऐप का प्रतिनिधित्व करता है? यह करने का दिलचस्प तरीका (और शायद ऐसा करने का तरीका)। आश्चर्य है कि अगर codeigniter इसे इस तरह से करेगा .. जाँच करेगा। मुझे यकीन है कि आप किसी भी सत्र या कनेक्शन राज्य को तोड़ने के बिना एक ऐप से दूसरे ऐप पर जा सकते हैं।
रशिनो

1
@Rushino CodeIgniter इसे इस तरह कर सकता है - आप कंट्रोलर डायरेक्टरी के अंदर फोल्डर रख सकते हैं। 'ऐप्स' के बीच अंतर डेटाबेस / मॉडल स्तर पर नहीं है, लेकिन नियंत्रक / दृश्य स्तर पर है। अलग होने का कारण यह है कि आपका बैकएंड बहुत अलग चीजें कर रहा है, अक्सर एक पूरी तरह से अलग डिजाइन के साथ। यह सुरक्षा में मदद करता है, क्योंकि आप पूरे बैकएंड निर्देशिका को आईपी प्रतिबंधित कर सकते हैं। और यह विकास में मदद करता है क्योंकि आप बिना बैकएंड को प्रभावित किए बैकएंड पर काम कर सकते हैं।
डैन ब्लो्स

2

मुझे लगता है कि आपको आदेशों और इस तरह से संबंधित सभी कार्यों के लिए प्रति आदेश नियंत्रक की तरह एक व्यापार इकाई का उपयोग करना चाहिए। मुझे पता है कि इस मामले में, नियंत्रकों को बड़ी संख्या मिलती है, लेकिन हम अभी भी अलग-अलग फाइलों में कार्रवाई फैलाने के लिए मॉडल आरंभीकरण और आंशिक कक्षाओं जैसी चीजों को सौंपने के लिए सहायक कक्षाओं का उपयोग कर सकते हैं।

उदाहरण के लिए, मेरे पास आदेश Create.cs and OrdersControllerके संबंधित सेट के साथ प्रत्येक एक आदेश के आदेश के लिए OrdersController List.cs फाइलें हो सकती हैं । चीजों को ज्यादा साफ-सुथरा बनाता है और फिर भी एक ही कंट्रोलर क्लास में ऑर्डर के संचालन को केंद्रीकृत रखता है।

बस मेरे 2 सेंट।


0

मुझे लगता है कि आप एक अलग तरीका अपना सकते हैं:

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

यह मेरा विचार नहीं है लेकिन सिम्फनी फ्रेमवर्क इस तरह से काम करता है इसलिए मैं आपको बता सकता हूं कि मेरे अनुभव से यह एक दृश्यपटल को लागू करने का एक बहुत अच्छा और सुरुचिपूर्ण तरीका है।

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