2009-09-29 11 views
9

मेरे पास एक बहुत बड़ी साइट है, और मैं इसे प्रबंधित करने का सबसे अधिक प्रभावी तरीका ढूंढ रहा हूं (मैं एकमात्र कोडर हूं)।एमवीसी बड़ी वेबसाइटें, एक नियंत्रक का उपयोग करें ... या कई?

मैं अपने सभी कोड को क्रम में रखने में मदद के लिए एक बहुत ही सरल एमवीसी संरचना (मैं ढांचे का उपयोग नहीं करना चाहता) तैयार करने की कोशिश कर रहा हूं।

एक बड़ी साइट के लिए, क्या सभी पृष्ठों को संभालने के लिए केवल एक नियंत्रक होना बेहतर है, या क्या उन्हें विभाजित करना बेहतर और आसान है?

यदि कोई है, तो गैर-फ्रेमवर्क नियंत्रक का एक अच्छा उदाहरण क्या है?

+1

आप ढांचे से बचना क्यों चाहते हैं? जबकि कुछ प्रतिबंधित हैं (यह * यह * तरीका करें, या आपको इसे मौत के लिए हैक करना होगा), कुछ ऐसे हैं जो बहुत लचीले होते हैं (चुनें और चुनें कि आप क्या चाहते हैं)। –

+2

अच्छी तरह से, मैं मुख्य रूप से टालना चाहता हूं क्योंकि मेरे पास अपनी खुद की क्रियान्वयन करने की आजादी और समय है, और मैं ढांचे का उपयोग शुरू करने से पहले एक के साथ एक ग्राउंड अप अनुभव करना चाहता हूं। भी ... मैं सामान्य रूप से – johnnietheblack

उत्तर

4

मैं किसी भी लॉजिकल डिवीजन को विभिन्न नियंत्रकों में विभाजित करता हूं - यदि यह सभी स्थिर पृष्ठ हैं, तो इसे सभी 'स्थिर पृष्ठ' नियंत्रक के साथ प्रस्तुत करें।

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

प्रत्येक बार जब कोई पृष्ठ उत्पन्न होता है या डेटा एक्सेस किया जाता है, तो एक अलग नियंत्रक का उपयोग करें।

बेशक, वर्ग विरासत का उपयोग नियंत्रक द्वारा आवश्यक कोड के साथ बेस क्लास बनाने के लिए किया जा सकता है।

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

3

आमतौर पर लोग कार्यक्षमता के विशिष्ट क्षेत्रों पर केंद्रित नियंत्रकों में नियंत्रकों को विभाजित करते हैं।

फिर वे इसके सामने एक "फ्रंट-कंट्रोलर" चिपकते हैं, इसलिए एप्लिकेशन में केवल एक प्रविष्टि बिंदु है। फ्रंट-कंट्रोलर का एकमात्र काम आने वाले अनुरोधों को उपयुक्त नियंत्रक को रूट करना है।

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

1

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

हालांकि, मुझे अक्सर लगता है कि मॉडल को अलग करने के लिए बहुत अधिक ओवरलैप है। आपके पास लेखों के लिए एक मॉडल हो सकता है, लेकिन यदि आप अन्य पृष्ठों पर साइडबार में शीर्ष 20 लेख प्रदर्शित करना चाहते हैं, तो वह कोड आलेख मॉडल में होना चाहिए - और आपको प्रत्येक पृष्ठ पर इसकी आवश्यकता होगी।

ईमानदारी से हालांकि, ऐसा करने का एकमात्र तरीका यह कोशिश करना और देखना है। एक एकल प्रविष्टि बिंदु से शुरू करें, और यदि यह भी अनावश्यक हो जाता है, तो इसे छोटे हिस्सों में दोबारा दोहराएं।

1

एक राउटर/प्रेषक, कई नियंत्रक मेरी सलाह होगी। नियंत्रकों को यूआरएल को मैप करना चाहिए, जिसका मतलब भिन्न कार्यक्षमता है। एक नियंत्रक प्रत्येक उपयोग मामले को पूरा करने के लिए विभिन्न सेवाओं के साथ सहयोग करेगा, इसलिए आपके ऐप के लिए एक नियंत्रक बहुत कमजोर हो जाएगा यदि आपके ऐप में कुछ हद तक उपयोग के मामले हैं।

+0

में मुझे चाहिए, अगर मेरे पास कुछ सौ पेज हैं ... मैं राउटर कैसे करूं? क्या यह सिर्फ एक विशाल स्विच है()? – johnnietheblack

+1

स्प्रिंग इसे नियंत्रकों को यूआरएल मैप करके करता है। शायद आपको इस तरह एक मैपर चाहिए। एक स्विच भंगुर होगा। – duffymo

4

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

  • ब्लॉग
    • पोस्ट
    • टिप्पणियाँ
    • श्रेणियाँ
  • सेटिंग
    • पोस्ट
    • उपयोगकर्ता: यहाँ एक चालू परियोजना से एक उदाहरण मैं पर काम कर रहा हूँ

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

फिर मैं राउटर (फ्रंट कंट्रोलर) का उपयोग करता हूं जो उचित मॉड्यूल/नियंत्रक/क्रिया के लिए एक आरईएसटी शैली यूआरआई को मानचित्र करता है। पूर्व: mysite.com/blog/posts/view/7 "ब्लॉग" मॉड्यूल से Controller_Posts :: व्यू (7) को कॉल करेगा। मॉड्यूल का उपयोग करने का एक अतिरिक्त लाभ यह है कि मेरे पास मॉड्यूल नहीं होने की तुलना में अधिक विशिष्ट यूआरआई हो सकते हैं। हालांकि मुझे लगता है कि राउटर का उपयोग करके उपचार किया जा सकता है जो कस्टम मार्गों को परिभाषित करने का समर्थन करता है, लेकिन मुझे इसका बहुत शौक नहीं है।

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

एक त्वरित तरफ के रूप में, मैं आपको एक ढांचे का उपयोग करने की सलाह दूंगा। मैं समझता हूं कि क्या आप पहले से बाहर किसी एक का उपयोग नहीं करना चाहते हैं, क्योंकि मैंने उनसे भी बचाया था। मैंने अपना खुद का लेखन समाप्त कर दिया जो पिछले साल से मुझे बहुत अच्छी तरह से सेवा करता है। यह एक महान सीखने का अनुभव था और इसमें केवल I चाहते/आवश्यकता है। ऐसा कहा जा रहा है कि आप कोहाना और केकपीएचपी में देखना चाहते हैं - वे अत्यधिक आईएमओ नहीं फेंक रहे हैं और वे आपको निश्चित रूप से समय बचाएंगे कि आप अपना खुद का लिखने का फैसला नहीं करना चाहिए।

संबंधित मुद्दे