2010-01-06 8 views
9

लंबे समय तक, पहली बार पोस्टर ...एमवीसी सर्वोत्तम अभ्यास के रूप में?

अब मैं उस बिंदु पर हूं जहां मैं लगभग खुद को एक पेशेवर ग्रेड PHP प्रोग्रामर कहूंगा और मेरे पास विभिन्न परियोजनाओं में बहुत सारे कोड का पुन: उपयोग होगा। इसके अलावा, मैंने कई ओपन सोर्स पैकेजों का उपयोग किया है जिनके साथ मैंने एमवीसी मॉडल का उपयोग किया है और नतीजतन मैंने हाल ही में बहुत सारे शोध किए हैं कि यह सब कैसे काम करता है ताकि मैं उन्हें आवश्यकतानुसार बेहतर ढंग से संपादित कर सकूं।

इस बिंदु पर, मैं एक नंगे हड्डियों एमवीसी ढांचे (एक ट्यूटोरियल से) लेने और इसे मेरी आगामी प्रोग्रामिंग नौकरियों के लिए आवश्यकतानुसार विस्तारित करने पर विचार कर रहा हूं।

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

या जब मैं लचीलापन कोडिंग करना चाहता हूं तो मैं मुद्दों में भागूंगा।

  • एक गैलरी, जहां मैं पेज के सिर में विभिन्न पृष्ठों पर अलग उत्पादन आकार और वर्तमान में पैरामीटर सेट करने के लिए चाहते हैं PHPthumb की तरह कुछ का उपयोग कर
  • एक्स क्षेत्रों और y क्षेत्रों के साथ एक प्रतिक्रिया प्रपत्र के साथ एक संपर्क फ़ॉर्म - पृष्ठ के शीर्ष
  • कुछ पृष्ठों को ob_start() और ob_flush() की आवश्यकता वाले कुछ पैरामीटर के साथ फिर से जेनेरिक फॉर्म क्लास के बजाय 2 अलग-अलग मॉडल की आवश्यकता होगी, लेकिन अन्य नहीं?

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

चीयर्स, niggles

+0

'मुझे पता है कि कोड के स्लैब का उपयोग करने से प्रत्येक थोड़ा सा काम कैसे करता है, मुझे कुछ भी नहीं पता है - निश्चित रूप से, आप पहले ** पर कोड ** के बारे में कुछ भी नहीं जानते हैं, लेकिन चूंकि PHP कोड सादा पठनीय है, यदि आप कोड का अध्ययन नहीं करना चाहते हैं तो आपकी गलती हो। – Lukman

+0

यदि आप वास्तव में रुचि रखते हैं कि "जो लोग इस मार्ग पर गए हैं" को कहना है, तो आपको "अपना खुद का ढांचा बनाने के लिए न कहें" के साथ आगे बढ़ना नहीं चाहिए। क्योंकि यह सबसे अच्छा जवाब है। – Marvo

+0

इसके अलावा, एक अच्छी तरह से सम्मानित ढांचे का उपयोग करना एमवीसी पैटर्न को लागू करने की आपकी समझ को बढ़ाने का एक शानदार तरीका है, जो आपको स्वयं को बनाने में मदद करेगा, आपको अभी भी उपलब्ध समाधानों की कमी होनी चाहिए। – Marvo

उत्तर

15

मैं आप कहते हैं कि आप इस सलाह नहीं करना चाहते हैं, लेकिन अपने स्वयं के बारे में नहीं है। मैंने जो भी काम किया है, उसमें मैंने पहली बार काम किया है, कुछ मौजूदा कोड या ढांचे को उठाया जाता है, अक्सर वाणिज्यिक लेकिन अत्यधिक संशोधित होता है, और इसे बनाए रखना शुरू कर देता है। आपको शायद ही कभी अपना खुद का लिखने का विकल्प मिलेगा, और ऐसा करना एक बुरा विचार है। यह कठिन, महंगा है, और किसी और ने पहले से ही लिखने की संभावना से बेहतर एमवीसी PHP फ्रेमवर्क लिखा है।

सचमुच mature PHP frameworks के दर्जन दर्जन हैं, जिनमें से अधिकांश एक दशक से अधिक समय से आसपास रहे हैं। उनमें से एक चुनें। इससे कोई फर्क नहीं पड़ता कि वे सभी एक दर्जन लोगों द्वारा कम से कम स्मार्ट के रूप में बनाए जाते हैं, जो आप एमवीसी ढांचे को बहुत अधिक लिख रहे हैं, और महीनों या वर्षों में अपने ढांचे को परिष्कृत करने और उपयोगकर्ता इनपुट सुनने में बिताए हैं।

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

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

+5

+1 अंतिम पैराग्राफ बस इतना सुंदर है कि यह मेरा दिन बना! – Lukman

+1

धन्यवाद, मैं झूठ नहीं बोल रहा था। मुझे निम्न स्तर कोड लिखना पसंद है। *इसे प्यार करना। लेकिन ऐसा करने से पूरी तरह से कंपनी का समय बर्बाद हो रहा है, और यह आपको निकाल दिया जाएगा। – meagar

+0

"मुझे पता है कि आप कहते हैं कि आप यह सलाह नहीं चाहते हैं, लेकिन अपना खुद का लिखें नहीं।" आपने जो भी कहा है उसमें उचित कॉल करें- लेकिन मुझे लगता है कि मेरी योजना नहीं है और कुछ विशाल जानवरों को बनाना है जो लिखने में 12 महीने लगेंगे। मैं इस समय बहुत सारी नौकरियां कर रहा हूं - कस्टम सीएमएस सिस्टम, कई दीर्घाओं और रूपों के साथ मिनीसाइट्स और अगले महीने मेरे पास समय प्रबंधन सुविधाओं के साथ सीआरएम है। मैं अपने काम को फिर से उपयोग करने योग्य चीज़ों में एकजुट करना चाहता था, भले ही यह टुकड़ा टुकड़ा हो। "पेशेवर अपनी निम्न-स्तर की लाइब्रेरी नहीं लिखते हैं।" सहमत - यदि वे मौजूद हैं और नौकरी करते हैं तो मैं कई तृतीय पक्ष वर्गों का उपयोग करता हूं :-) – niggles

3

अपना खुद का ढांचा लिखना आपके स्वयं के संपादन और वास्तव में भाषा को समझने के लिए बहुत अच्छा है।

व्यक्तिगत रूप से मुझे इसे तीसरे पक्ष के ढांचे का उपयोग करके समय लेने के रूप में मिलता है क्योंकि यह स्वयं लिखना है। फिर भी मेरे पास अपने कोड का पूरा नियंत्रण है, ऐसा कुछ भी नहीं जिसे आप किसी तीसरे पक्ष के ढांचे के साथ दावा कर सकते हैं।

मुझे यह भी लगता है कि कई एमवीसी ढांचे बहुत संसाधन गहन हैं। उच्च मात्रा साइटों के लिए आपको उन्हें अच्छी तरह से चलाने के लिए हार्डवेयर फेंकने के लिए तैयार होने की आवश्यकता है। कम मात्रा साइटों (बहुमत) के लिए एक तीसरे पक्ष के एमवीसी ढांचे का तेजी से विकास एक बड़ा बोनस है।

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

0

कोई भी एमवीसी - होमग्राउन या नहीं - आपको लचीलापन और पुनः उपयोग करने योग्य कोड की अनुमति देगा।

ob_start()/ob_ * कॉल कर रहे हैं कोई समस्या नहीं है, वे अपने मॉडल में जाने के लिए और अपने टेम्पलेट से कहा जाता है, उदाहरण के लिए:

Hello <?php echo $this->getFormattedName(); ?> 

जहां अपने मॉडल

function getFormattedName() { 
    ob_start(); 
    echo '<a href="/profile/' . $this->getName() . '">' . $this->getName() . '</a>'; 
    $return = ob_end_clean(); 
    return $return; 
} 

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

आप ज़ेंड फ्रेमवर्क जैसे कुछ का उपयोग करने पर विचार करना चाहेंगे - जबकि यह एक एमवीसी लाइब्रेरी अपने दाहिने हिस्से में है, तो आप आसानी से एकल घटकों को खींच सकते हैं (उदाहरण के लिए, आप अपने संपर्क और प्रतिक्रिया के लिए ज़ेंड_फॉर्म और ज़ेंड_Mail में खींच सकते हैं फॉर्म & सत्यापन और अन्य सभी चीज़ों के लिए अपने मॉडल का उपयोग करें)। यह आपको फॉलबैक होने का अतिरिक्त लाभ भी देगा जब/यदि समय आता है जब आपका होमब्री एमवीसी ढांचा अपने मूल डिजाइन को आगे बढ़ना शुरू कर देता है। या, कम से कम, अपने विकास के समय को तेज करें ताकि आप दिनों तक नहीं रह सकें क्योंकि आपको अचानक एहसास हुआ कि आपको ई-मेल मॉडल की आवश्यकता है।

+0

आउटपुट बफरिंग का यह उपयोग लगता है ... अत्यधिक। स्ट्रिंग संगतता के साथ क्या गलत है? – meagar

+0

Concatenation के साथ कुछ भी गलत नहीं है। सिर्फ एक उदाहरण, चूंकि ओपी ने विशेष रूप से 'ob_start()' आदि का उपयोग करने के बारे में पूछा है :) – gabrielk

+0

यह बिल्कुल गलत है। आपके मॉडल को कभी भी एचटीएमएल आउटपुट नहीं करना चाहिए, यही विचार है। एमवीसी का * पूरा बिंदु * आपके प्रदर्शन कोड से आपकी व्यावसायिक वस्तुओं को डीकॉप्लिंग कर रहा है। आउटपुट बफरिंग का उपयोग करने के लिए यह बिल्कुल * नहीं * है। जूता-सुबह में क्योंकि यह प्रश्न में संदर्भित किया गया था, यह अब और मान्य नहीं है। – meagar

1

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

एमवीसी में आप प्रति नियंत्रक के एक दृश्य से बंधे नहीं हैं, आप प्रति नियंत्रक के रूप में कई विचारों का उपयोग कर सकते हैं क्योंकि प्रत्येक खुला विधि प्रत्येक दृश्य को स्वयं कॉल कर सकती है और यह नियंत्रित कर सकती है कि आप जिस व्यवसाय तर्क को परिभाषित करते हैं, उसके आधार पर यह कैसा दिखता है और व्यवहार करता है। उस ने कहा कि आपके पास दो पेज बनाने के बिना पूर्ण आकार की छवि और थंबनेल वापस करने के 2 तरीके हो सकते हैं। आप कंट्रोलर, हेडर मेटा-डेटा, स्क्रिप्ट्स, लिंक, थीम, कंटेंट इत्यादि से दृश्य पर सबकुछ सेट कर सकते हैं ...

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

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

यदि आप डिज़ाइन पैटर्न के बारे में और अधिक विचार प्राप्त करना चाहते हैं तो आप Google एमवीपी डिज़ाइन पैटर्न और/या एमवीवीएम डिज़ाइन पैटर्न का उपयोग कर सकते हैं।

1

मैंने अपना खुद का ढांचा लिखा है। वास्तुकला और कच्चे कोड को बनाने में समय नहीं लगता है। यह बहुत अच्छा है अगर कोई अपना ढांचा लिखता है। लेकिन अगर दस्तावेज निश्चित रूप से गधे में दर्द से उचित नहीं है। पूरी तरह से अपने आप पर निर्भर करता है। मैंने भी मेरा लिखा है। फ्रेमवर्क क्यूए तैयार करने में लगभग 7 दिन लग गए :)। लेकिन मुख्य मुद्दा यह है कि आप अपने ढांचे में लिखने वाले कोड के टुकड़े से संतुष्ट हो जाएं। आप हमेशा अपने ढांचे को सुधारना चाहते हैं और चाहते थे कि यह सबसे अच्छा हो। Blah! Blah! यदि आप अपना खुद का लिखना चाहते हैं और आप आत्मविश्वास के लिए पर्याप्त आत्मविश्वास रखते हैं। इसके लिए जाओ।

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