2011-02-07 7 views
7

मैं एक गैर-कंप्यूटिंग पृष्ठभूमि से हूं और मैं सामान्य रूप से एमवीसी डिजाइन दृष्टिकोण और ढांचे के आसपास अपना सिर प्राप्त करने के लिए संघर्ष कर रहा हूं। मैं कोड पुनः उपयोग करता हूं, और प्रदर्शन से तर्क को अलग करता हूं, और मुझे encapsulation और decoupling "मिलता है", लेकिन मुझे यह नहीं मिलता है।कोल्डफ्यूजन, पेज नियंत्रक पर फ्रंट कंट्रोलर डिज़ाइन का क्या फायदा है?

इस समय मैं बस सबकुछ जड़ में डालता हूं, छवियों, सीएफसीएस, और _ शामिल हैं, सीएफसीएस के माध्यम से सभी डेटाबेस इंटरैक्शन। मैं पृष्ठ के शीर्ष पर अपनी सभी प्रसंस्करण करता हूं, फिर एक टिप्पणी पंक्ति तब नीचे/पृष्ठ लेआउट प्रदर्शित करती है।

चौखटे मैं पर ध्यान दिया है से अधिकांश, एक सामने नियंत्रक के पक्ष में तो एक शीर्ष नियंत्रक की मेरी सरलीकृत संस्करण MVC डिजाइन सीएफसी, नियंत्रक, और विचारों के लिए एक सबफ़ोल्डर और index.cfm

में एक बड़ा स्विच बयान होगा लगते हैं
<cfif not IsDefined("URL.event")> 
    <cflocation url="index.cfm?event=home" addtoken="No"> 
</cfif> 

<cfswitch expression="#url.event#"> 
    <cfcase value="home"> 
     <cfinclude template="controllers/home.cfm"/> 
     <cfinclude template="views/home.cfm"/> 
    </cfcase> 
    <cfcase value="about"> 
     <cfinclude template="controllers/about.cfm"/> 
     <cfinclude template="views/about.cfm"/> 
    </cfcase> 
</cfswitch> 

.. लेकिन मुझे एक पृष्ठ नियंत्रक डिज़ाइन पर क्या वास्तविक लाभ मिलता है? जब तक कि मैं केवल उन साइटों की तरह नहीं लिखता, मुझे हमेशा लगता है कि नियंत्रक तर्क एक दृश्य के लिए विशिष्ट है, ऐसा नहीं है कि एक नियंत्रक कई विचारों को फिट कर सकता है या कई नियंत्रक एक दृश्य में आउटपुट कर सकते हैं, तो क्या होगा उन्हें अलग करना?

मेरे लिए अभी तक कोई प्रकाश नहीं आया है, कोई संकेतक?

उत्तर

4

तक "टॉप" नियंत्रक, मुझे लगता है कि तुम्हारा मतलब "front" controller, एक आवेदन पत्र में अनुरोध के लिए प्रवेश का एक बिंदु। जैसा कि @ बपानुल्ला ने लिखा था, अधिकांश कोल्डफ्यूजन ढांचे इस डिजाइन पैटर्न का उपयोग करते हैं। यह URL rewriting, जहां यह एक URL (उदा domain.ext/i/am/friendly.ext) में अवरोध उत्पन्न कर और कुछ मानक फाइल करने के लिए यह इस तरह के रूप में index.cfm मार्ग, जबकि अनुरोध किया गया URL एक पैरामीटर (अक्सर एक अनुरोध हेडर के रूप में) बनाकर search engine safe URLs के लिए आसान हो जाता है के साथ विशेष रूप से दिलचस्प हो जाता है। यह साइट को फिर से डिज़ाइन करता है जहां यूआरएल आसान हो जाता है क्योंकि यह अलियासिंग या रीडायरेक्ट करने के लिए खुद को अच्छी तरह से उधार देता है।

जहां तक ​​नियंत्रकों का संबंध है, वे आम तौर पर कसकर किसी विशेष URL या URL प्रतिमान के लिए युग्मित कर रहे हैं। यह संभव है कि नियंत्रकों के साथ अधिक ढीला हो, लेकिन व्यावहारिक रूप से मुझे लगता है कि कई रिफैक्टरिंग के बाद यह एक उभरती हुई संपत्ति है। नियंत्रक अंतर्निहित होना चाहिए service layer पर एक या अधिक कॉल जो डेटाबेस से बात करती है, व्यवसाय प्रक्रिया निष्पादित करती है, राज्य संस्थाओं को बनाती है, आदि ... फिर नियंत्रक सेवा परत के आउटपुट प्राप्त करता है और उन्हें जो भी तंत्र में रखता है (उदाहरण के लिए event ऑब्जेक्ट) का उपयोग डेटा को देखने के लिए किया जाता है।

यह सेवा परत है जो नियंत्रकों को पुन: प्रयोज्य नहीं है। नियंत्रक केवल उस एप्लिकेशन के ढांचे का विस्तार करते हैं जो एक एप्लिकेशन के भीतर काम करता है।विचार यह है कि आप विचारों और सेवा परत पर बहुत कम प्रभाव के साथ ढांचे को स्विच करने में सक्षम होना चाहिए। टुकड़ा जिसे छूने की जरूरत है नियंत्रक हैं।

तो सेवा परत में दी गई सेवा ऑब्जेक्ट एकाधिक नियंत्रकों की सेवा करने में सक्षम होना चाहिए। उदाहरण के लिए, किसी साइट पर विजेट के रूप में उपयोगकर्ताओं की जानकारी में लॉग इन दिखाने पर विचार करें। अलग-अलग नियंत्रकों द्वारा प्रदान किए जाने वाले विभिन्न पृष्ठ हो सकते हैं, लेकिन प्रत्येक उपयोगकर्ता सेवा में लॉग इन करने के लिए एक ही सेवा ऑब्जेक्ट को कॉल करेगा जो संभावित रूप से विजेट को प्रस्तुत करने वाले दृश्य को दिया जा सकता है।

अद्यतन: मोर्चा नियंत्रक लाभ

  • सुरक्षा: केंद्रीकृत प्रमाणीकरण और प्राधिकरण।
  • i18n & l10n: अनुरोध में सही भाषा पैक इंजेक्षन विश्व स्तर पर
  • प्रक्रिया आर्केस्ट्रा: खरीदारी की टोकरी जहां पीछे या आगे बटन काम नहीं करना चाहते हैं के लिए लगता है कि बहु कदम जांच प्रक्रिया - सब कुछ रूट करके सामने नियंत्रक के माध्यम से आप को लागू करने में सक्षम हैं क्या कदम (यानी राज्य)
  • लॉगिंग & ट्रैकिंग: बड़ी आसानी से एक ही स्थान पर इसके अलावा बनाकर Google Analytics या अन्य अनुरोध एक साइट में ट्रैकिंग जोड़ने
  • हैंडलिंग त्रुटि: केंद्रीकृत व्यवहार

अब इन वस्तुओं में से कई भी <cferror> और Appplication.cfc उपयोग किया जा सकता है, लेकिन मैं यह आसान एक केंद्रीकृत बिंदु है करने के लिए लगता है।

उपयोगी लिंक्स

+0

ठीक पूरी तरह से स्वीकार कर रहा है कि इसकी सेवा परत है कि डिजाइन किया जाना चाहिए संक्षिप्त करने में। लेकिन यूआरएल दोबारा लिखने के मुद्दों के अलावा (माना जाता है कि कोई वेब सर्वर पर ऐसा नहीं कर रहा है) एक पेज नियंत्रक पर फ्रंट कंट्रोलर किस लाभ का लाभ उठाता है? यह मुझे पृष्ठ के निचले भाग के बजाय संपादक में खोलने के लिए बस एक और फ़ाइल की तरह दिखता है, पृष्ठ के नीचे देखें। – Saul

+0

@ साउल: मेरा अपडेट देखें। – orangepips

+0

कि एमएसडीएन अच्छा था, खासकर जो आपने प्रक्रिया ऑर्केस्ट्रेशन कहा था। यह एक समस्या है जिसे मैंने बहु पृष्ठ रूपों के साथ पाया है। – Saul

2

आपने वास्तव में फ्यूजबॉक्स (http://www.fusebox.org/) के क्रूक्स को आपके द्वारा लिखे गए कार्यों के साथ कार्यान्वित किया। इसमें कुछ भी गलत नहीं है, और अधिकांश कोल्डफ्यूजन समुदाय ने कुछ सालों तक ऐसा कुछ भी इस्तेमाल किया - फ्यूजबॉक्स कुछ साल पहले तक का सबसे अधिक इस्तेमाल किया गया सीएफ फ्रेमवर्क (मेरे अनुभव में) था जब मॉडलग्लू, मैक-द्वितीय और दूसरा दूसरा पीढ़ी सीएफ ढांचे के बारे में आया था।

एक बात जो मैं इंगित कर सकता हूं वह यह है कि नियंत्रक (जैसे .cfm फाइल) वास्तव में आपके ऑब्जेक्ट विधि कॉल पर जाने वाले विशिष्ट तर्कों के साथ सामान्य ओओडी फैशन में encapsulation लागू नहीं करता है। जब तक आप बेहद डिलिगेंट न हों, समय के साथ आपके .cfm नियंत्रक बड़ी संख्या में अनियंत्रित पैरामीटर जमा कर सकते हैं जो एक समस्या या किसी अन्य को हल करने के लिए व्यवहार को बदलते हैं।

विभिन्न ढांचे के साथ आपको एप्लिकेशन, सत्र और अनुरोध विशिष्ट कोड (ऑनप्लिकेशंस स्टार्ट, ऑन रिक्वेस्ट एंड इत्यादि) जैसी अच्छी सुविधाएं भी मिलती हैं। लेकिन आप उन्हें हमेशा एक सरल Application.cfc के माध्यम से प्राप्त कर सकते हैं।

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