2009-11-18 10 views
6

मैं जानना चाहता हूं कि कौन सी php आर्किटेक्चर रणनीतियों डेवलपर्स जटिल php अनुप्रयोगों में उपयोग करते हैं। अब तक, मुझे एमवीसी संरचना पता है जिसमें मॉडल, विचार और नियंत्रक (और नियंत्रक प्लगइन्स शामिल हैं जो सामान्य कार्यों जैसे कि उपयोगकर्ता पहुंच नियंत्रक) के साथ संभालते हैं। मैं कुछ अच्छे PHP ढांचे को जानता हूं जो कुछ सामान्य सामान को आसान बनाता है। लेकिन समस्या तब शुरू होती है जब मैं विशाल और जटिल PHP अनुप्रयोगों के बारे में बात करता हूं। क्योंकि इन अनुप्रयोगों में बहुत सी चीजें हैं या जांच करने के लिए बहुत सारे विचार हैं, इसलिए मैं यह तय नहीं कर सकता कि कौन सा कोड होना चाहिए।बहुत ही जटिल PHP अनुप्रयोगों का आर्किटेक्चर?

Magento एप्लिकेशन के बारे में सोचें, यह बहुत बड़ा एप्लिकेशन है। जब मैं एप्लिकेशन के स्रोत कोड की समीक्षा करता हूं, तो मैं डिजाइन रणनीति को समझ नहीं सकता। मुझे पता है कि कुछ परिपूर्ण डिजाइन रणनीतियां हैं जो बहुत बड़े PHP अनुप्रयोगों को आसानी से संभाल सकती हैं, क्योंकि वे बहुत कमजोर डिज़ाइन रणनीति के साथ इतना बड़ा एप्लिकेशन नहीं बना सकते हैं। डिज़ाइन रणनीति को आपके इच्छित से अधिक समर्थन देना चाहिए, ताकि आप अपना कोड सुधार सकें और आवेदन आसानी से

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

मुझे पता है कि यह बहुत ही अमूर्त प्रश्न है, लेकिन ऐसा इसलिए है क्योंकि अब मेरी PHP पृष्ठभूमि शौकिया शौक से आ रही है अकादमिक से नहीं। मैं और अधिक करना चाहता हूं, लेकिन मैं कहीं और हूं जहां मैं एक कदम आगे नहीं जा सकता, क्योंकि मुझे कोडिंग के बारे में अधिक जटिल जानकारी नहीं मिल रही है। जो भी हो, समेकित करने के लिए, मैं जटिल php अनुप्रयोगों जैसे Magento के लिए डिज़ाइन रणनीतियों के बारे में जानना चाहता हूं।

हो सकता है कि डिजाइन रणनीतियों जो मुझे पता है .. (MVC, ci केक चौखटे ...) की तुलना में मुझे लगता है कि और अधिक जटिल अनुप्रयोगों संभाल कर सकते हैं

अगर वहाँ मेरे सवालों कृपया उन्हें सही करने के लिए स्वतंत्र महसूस में कुछ गलतियां कर रहे हैं, मेरी अपर्याप्त अंग्रेजी के लिए खेद है ..

उत्तर

7

मुझे विश्वास है कि आपकी समस्या का हिस्सा इस तथ्य में झूठ बोल सकता है कि एंटरप्राइज़ एप्लिकेशन बनाना किसी भी भाषा में एक समस्या है, और डिजाइन पैटर्न जो लागू हो सकते हैं वास्तव में भाषा अज्ञेयवादी हैं।

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

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

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

इसके अलावा (और फिर आप इसे मार्टिन फाउलर द्वारा पीओएफईएए से सीख सकते हैं) आपको ऑब्जेक्ट-रिलेशनल-मैपिंग के बारे में जानने की आवश्यकता होगी जो विभिन्न डिज़ाइन पैटर्न की ताकत और कमजोरियां हैं।

दुर्भाग्य से आपकी ज़रूरतों के आधार पर चीजों को करने के कई अच्छे तरीके हैं, लेकिन हर अच्छे तरीके से उनके लिए लगभग एक अरब गलत तरीके हैं।

+0

आपके उत्तर के लिए धन्यवाद:

तो पर एक नज़र डालें।आपके द्वारा दिया गया लिंक मेरे लिए बहुत उपयोगी है। मैं बस अपने सबसे कमजोर बिंदु को समझ गया, मेरी समस्या "वसा नियंत्रक = मॉडल + नियंत्रक" समस्या है। मुझे लगता है कि मेरे अनुप्रयोगों को कौन सा सीमा है कि मेरे पास कोई 'उपयोगी' मॉडल नहीं है, मेरे मॉडल ढांचे के डेटाबेस एडाप्टर के साथ खाली कक्षाएं हैं, और मेरे पास विशाल नियंत्रक हैं जिनमें सभी तर्क हैं। इसलिए मुझे लगता है कि मुझे वास्तविक मॉडल –

+0

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

+0

@ ओगुज़ - क्या आप ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग से संबंधित हैं, खुद को दोहराएं, अकेले उत्तरदायित्व सिद्धांत या encapsulation के साथ परिचित हैं? –

1

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

ए) से जोड़ता हूं। कोई भी एक साधारण समस्या के लिए एक जटिल वास्तुकला का उपयोग कर रहा है। जैसे ठंडा लग रहा है कि हर डिजाइन पैटर्न और ढांचे का उपयोग करके।

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

ग) विरासत प्रणालियों और विरासत प्रणाली एकीकरण (ठीक ख देखें)

Magento एक बड़ा आवेदन किया जा सकता है, लेकिन मूल फ्रेमवर्क, अभी भी Zend Framework है मुख्य रूप से अपने MVC हिस्सा। तो Zend_Framework दस्तावेज़ीकरण को पढ़ने से आप Magentos आर्किटेक्चर को भी समझने में बहुत मदद करेंगे (मैं Magento स्रोत के माध्यम से ज़ेंड फ्रेमवर्क में खोदने की कोशिश करके इसे दूसरी तरफ अनुशंसा नहीं करूंगा)। मैं वास्तव में एमवीसी ढांचे में से एक के साथ एक बड़ा आवेदन बनाने की सलाह दूंगा, क्योंकि आर्किटेक्चर और इसके लाभों और सीमाएं कहां सीखने का यह सबसे अच्छा तरीका है।

2

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

आप डिज़ाइन रणनीतियों के कुछ विचारों के लिए PHP 5 Objects Patterns and Practice पुस्तक भी देखना चाह सकते हैं जिन्हें आप अपने आवेदन पर लागू कर सकते हैं। आप अन्य भाषाओं में लिखे गए ढांचे का अध्ययन करके काफी कुछ सीख सकते हैं। उदाहरण के लिए, कई PHP ढांचे के डिजाइनरों को रूबी पर रूबी द्वारा बहुत प्रेरित किया गया था।

1

यदि आपके पास पहले से नहीं है, तो आपको ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में देखना चाहिए। here के बारे में वास्तव में एक महान ट्यूटोरियल है। मुझे लगता है कि यह शायद सबसे महत्वपूर्ण बात है कि बड़े वेब ऐप्स ऐसा करते हैं जो शौकिया (स्वयं शामिल) के लिए जरूरी नहीं है। कोड इग्निटर जैसे एमवीसी ढांचे में चाल कक्षाओं (या वस्तुओं) की श्रृंखला को मॉडल या पुस्तकालयों के रूप में बनाना है।

+0

क्या वह डिजाइन पैटर्न का उल्लेख करेगा यदि वह ओओपी नहीं जानता था? – MiseryIndex

0

ठीक है, भले ही आपका प्रश्न केवल PHP के बारे में है ... यदि आप अपनी स्थिर सामग्री को PHP के साथ छवियों को संभालते हैं तो इससे खराब प्रदर्शन होगा, चाहे आप एमवीसी का उपयोग कर रहे हों या नहीं। आपको ऐसी चीजों के लिए nginx जैसे फ्रंट एंड का उपयोग करना चाहिए।

http://highscalability.com/ वास्तविक जीवन से वास्तविक कहानियां देखें!

नोट्स भी NoSQL नोट करें।

0

मैंने आपकी समस्या को समझने की कोशिश की और पाया कि Magento वास्तुकला बहुत शक्तिशाली लेकिन जटिल है। मुझे Zendfox द्वारा समाधान मिला, यह एक वेब अनुप्रयोग ढांचा है, जो छोटे से बड़े अनुप्रयोग विकास के लिए उपयुक्त है। इसमें बहुत प्यारा एप्लिकेशन आर्किटेक्चर है जिसे बहुत आसानी से प्रबंधित किया जा सकता है। इसमें कुछ मिनट विज़ार्ड आधारित टूल के भीतर ज़ेंडफ़ॉक्स के लिए कस्टम मॉड्यूल बनाने के लिए मॉड्यूल डेवलपर भी है। http://www.zendfox.com

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