Zend फ्रेमवर्क इतना जटिल क्यों है?


42

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

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

इसी तरह रूटिंग का विचार बहुत जटिल है क्योंकि यह कोर प्रोग्रामर के लिए नया है। मुझे पता है कि यहाँ के लोग इस तरह के हज़ारों सवाल पढ़ते हैं जैसे मैं पूछ रहा हूँ लेकिन मैं ज़ेड फ्रेमवर्क रातोंरात सीखना नहीं चाह रहा हूँ। मैं उतना ही समय देने के लिए तैयार हूं जितना इसकी जरूरत है लेकिन अब तक इसका कोई मतलब नहीं है। ज़ेंड लाइब्रेरी में हजार कक्षाएं हैं, लेकिन एक नॉब को कैसे पता चलेगा कि एक सटिक क्लास का उपयोग कहां करना है और इसका उपयोग कैसे करना है? मुझे अभी भी Zend फ्रेमवर्क के बूटस्ट्रैप और इसकी मैपिंग को समझना बहुत मुश्किल हो रहा है। मैं मैनुअल पढ़ता हूं, इसका पालन करता हूं और चीजें काम करना शुरू कर देती हैं लेकिन मैं वास्तव में वास्तव में ऐसा नहीं करता कि वे वास्तव में कैसे हो रहे हैं।

मेरे पास अभी भी कोई सुराग नहीं है कि मॉडल, विचार और नियंत्रक एक साथ कैसे काम करते हैं और ज़ेंड फ्रेमवर्क में आवेदन की योजना कैसे बनाते हैं। जब यह कोर php की बात आती है, तो मेरे दिमाग में यह विचार आता है कि क्या करना है और आसानी से कोड में अनुवाद करना है लेकिन Zend फ्रेमवर्क में मुझे नहीं पता कि मैं अपने विचार का अनुवाद कैसे करूं।


10
यदि आप एमवीसी के लिए नए हैं, तो किसी भी पूर्ण-विकसित का उपयोग करने से पहले अपने आप को एक एमवीसी मचान लागू करें - वे सीखने के लिए अच्छे नहीं हैं।
treecoder

2
@greengit यही मैंने किया है!
काइल हॉजसन ने

Zend फ्रेमवर्क कठिन नहीं है, खराब प्रलेखन के कारण इसे सीखने के लिए थोड़ा समय चाहिए, लेकिन मैं आपको यह सुनिश्चित कर सकता हूं, कि यह एक बहुत शक्तिशाली ढांचा है। हमने ZF2 पर बड़े उद्यम सॉफ्टवेयर का निर्माण किया है, और कॉन्फ़िगरेशन पर लचीलापन ZF में असाधारण है।
अल्बानक्स

जवाबों:


38

ज़ेंड फ्रेमवर्क कठिन है। इसे प्रवेश स्तर के ढांचे के रूप में नहीं बनाया गया था, इसमें शामिल अवधारणाओं का ज्ञान 1 माना जाता है । उस ने कहा, Zend फ्रेमवर्क 2.0 के लिए पहली आवश्यकता इसे थोड़ा आसान बनाना है:

सीखने की अवस्था को कम करें

2009 के उत्तरार्ध में, हमने यह निर्धारित करने के लिए कि वे क्या उपयोग करते हैं, किस वातावरण का उपयोग करते हैं, और उनकी आवश्यकताएं क्या हैं, यह निर्धारित करने के लिए फ्रेमवर्क उपयोगकर्ताओं का एक सर्वेक्षण किया। शीर्ष मुद्दा, बार नो, फ्रेमवर्क सीखने की कठिनाई थी। इनमें से कुछ मुद्दों में शामिल हैं:

  • फ्रेमवर्क के साथ "पहले घंटे" में कठिनाई।
  • त्वरित शुरुआत के बाद "अगले चरणों" के बारे में अनिश्चितता।
  • स्रोत कोड में ही असंगत एपीआई। एक घटक "प्लगइन्स," एक और "हेल्पर्स," और अभी तक एक और "फिल्टर" का उपयोग कर सकता है।
  • एक्सटेंशन पॉइंट मौजूद हैं, और उनके लिए कैसे प्रोग्राम करना है, इसके बारे में अनिश्चितता।
  • इस बात को लेकर भ्रम है कि वे Zend फ्रेमवर्क का उपयोग केवल MVC स्टैक के रूप में कर सकते हैं या व्यक्तिगत घटकों के रूप में।

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

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

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

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

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

2 ब्लॉग पोस्ट के शीर्ष पर अस्वीकरण पढ़ें।


अपडेट, @ करपी की टिप्पणी से प्रेरित:

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

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

यदि आप अवधारणाओं को जानते हैं, तो फ्रेमवर्क रास्ते में नहीं होना चाहिए।


3
यहां तक ​​कि अवधारणाओं के ज्ञान के साथ, इसे पाने में मुश्किल है, और ईमानदार होने के लिए मुझे नहीं लगता कि यह प्रयास के लायक है। दस्तावेज़ीकरण अक्सर गलत होता है, आमतौर पर तारीख से बाहर होने के बाद वेब पर उदाहरण, आईआरसी सपोर्ट चैनल आम तौर पर मृत होता है, और मैंने जो देखा है वह समर्थन पाने के लिए कोई अन्य जगह नहीं है।
sevenseacat

@ कर्क मुझे यह मुश्किल नहीं लगता, ईमानदार होना चाहिए। लेकिन यह एक तरह से मुहावरेदार है, इसलिए यह निश्चित रूप से कुछ डेवलपर्स को दूसरों की तुलना में बेहतर लगता है। उदाहरण के लिए, मुझे CodeIgniter की तुलना में समझना आसान लगता है, लेकिन यह सिर्फ मेरी व्यक्तिगत प्रक्रिया के कारण है: मैं प्रलेखन की तुलना में कोड पढ़ना पसंद करता हूं, और CI का कोड बकवास से भरा हुआ है, मेरा दिमाग थरथरा जाता है। लेकिन अधिकांश डेवलपर्स के लिए CI ZF की तुलना में सीखना बहुत आसान है, और हर कोई इस बात से सहमत नहीं है कि CI का कोड बकवास से भरा है। महत्वपूर्ण बात यह है कि एक रूपरेखा का उपयोग करना मुश्किल नहीं है, अगर यह वहाँ हमेशा दूसरों के बाहर है।
यानिस डे

मुझे लगता है Zend फ्रेमवर्क 1 समझ में अपेक्षाकृत आसान है। लेकिन आपने कहा कि ZF2 के पीछे का विचार इसे आसान बनाना था , मुझे ऐसा लगता है कि यह पहले से कहीं अधिक जटिल है।
777

ZF2 में सब कुछ अत्यधिक जटिल है। मॉड्यूल / पुस्तकालयों के संग्रह के रूप में Zend "रूपरेखा" प्रस्तुत करना ठीक होगा। वास्तविक ढांचा गायब है। कोई मॉडल परत नहीं है, इसलिए आपको या तो अपना स्वयं का कार्यान्वयन करना होगा, जो आमतौर पर एक गड़बड़ है या डॉक्ट्रिन का उपयोग करें, जिसके लिए कुछ एकीकरण की आवश्यकता होती है। कुछ यूनिट परीक्षणों को लिखने के लिए आपको मैनुअल और डिक्रिपियरिंग (या ऑनलाइन खोजने की कोशिश) को डिकिपेरिंग करने के लिए एक हास्यास्पद राशि खर्च करने की आवश्यकता होती है। हालांकि इसे ध्वनि अवधारणाओं के आसपास बनाया जा सकता है, लेकिन उन अवधारणाओं की व्याख्या भयानक है।
vladko

11

मुझे खोज की कमी पसंद नहीं थी जब मैंने Zend फ्रेमवर्क का उपयोग करना शुरू किया, बहुत सारे वर्ग सरणियों पर भरोसा करते हैं और आपको यह देखना होगा कि आपको किन कुंजियों को परिभाषित करने की आवश्यकता हो सकती है।

स्पष्ट सेट विधियों या नामित पैराम्स के साथ कुछ भी गलत नहीं है, यह खोज की मदद करने के लिए एक लंबा रास्ता तय करेगा।

Yii फ्रेमवर्क इस तरह की चीज़ के साथ और भी खराब है।


3
+1 ZF / ZF2 के उठाव पर गंभीरता से विचार न करने का मेरा महत्वपूर्ण कारण है, बदसूरत, ऑटो कम्प्लीट / हिन्टिंग और इंटेली-सेंस डाइडिंग नेस्टेड ऐरे आधारित कॉन्फ़िगरेशन। यह एक OO दुनिया में सरणियों के अति प्रयोग के लिए मेरी व्यक्तिगत नापसंदगी का उल्लंघन करता है।
गैविन हॉवेन

1
ठीक है मेरी राय के रूप में अच्छी तरह से।
डैनियल

मुझे Yii 1 बहुत मुश्किल नहीं लगता। शायद मेरे लिए वही है। : पी
यूजीन जोसेफ

5

ZF के साथ कुछ समस्याएं, जो इसे परेशान करती हैं (और शुरुआती के लिए कठिन):

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

अपठनीय, फूला हुआ URL राउटर । उदाहरण के लिए, यह रूटिंग के सबसे सरल को परिभाषित करने के लिए कोड की 9 लाइनें लेता है:

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

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

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

Zend_Aclअधिकांश उपयोग के मामलों के लिए जटिल है। आम तौर पर आपके पास उपयोगकर्ता की पहचान करने के लिए प्रमाणीकरण होगा। और कुछ नियंत्रकों तक पहुंच को आसानी से सीमित करने के लिए एक विकल्प केवल प्रमाणित उपयोगकर्ताओं के लिए है। कई उपयोगकर्ता मामले के लिए यह पर्याप्त है। यह निर्धारित करने के लिए कि उपयोगकर्ता के पास कुछ कार्रवाई करने की अनुमति है, और अधिक जटिल मामले के लिए यह नियंत्रक में व्यावसायिक तर्क के लिए होगा। ZF में आपके पास केवल प्रमाणित उपयोगकर्ताओं तक आसानी से पहुंच को सीमित करने का विकल्प नहीं है, मानक तरीका ACL और रोल्स सिस्टम का उपयोग करना है, भले ही आपकी आवश्यकता वास्तव में कितनी सरल हो।

फूला हुआ निर्देशिका और फ़ाइल लेआउटअनुशंसित निर्देशिका संरचना इस तरह दिखती है:

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

4

ज़ेंड फ्रेमवर्क स्वतंत्र पुस्तकालयों के एक समूह की तरह है जो एक साथ एक फ्रेमवर्क की तरह काम करता है। एक ही समय में डिकॉउल्ड और "उपयोग करने में आसान" कुछ विकसित करना बहुत कठिन है। "उपयोग में आसान" के लिए मेरा मतलब है कोड की कुछ पंक्तियों के साथ जटिल चीजें करना।

तो, Zend के साथ शुरू करना कठिन है, तो CakePHP जैसे अन्य ढांचे। लेकिन मैं यह भी आसान है और कोई गंदा कोड के साथ अपने आवेदन को अनुकूलित। Zend अपने कोड में सभी मानकों और डिज़ाइन पैटर्न का अनुसरण करता है, इसलिए एक बार जब आप फ्रेमवर्क कोड पढ़ लेते हैं, तो आप अनुमान लगा सकते हैं कि क्या चल रहा है।

जब आप कहते हैं कि आपके पास कोई सुराग नहीं है कि मॉडल, विचार और नियंत्रक एक साथ कैसे काम करते हैं, तो कृपया, फ्रेमवर्क को दोष न दें। यह एमवीसी को किसी भी अन्य ढांचे की तरह लागू करता है, सिवाय इसके कि यह मॉडल को डेटाबेस संरचना से अलग करता है, जो एक ही वर्ग में बहुत सारे ढांचे लागू होते हैं। तो आप Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset, आदि जैसे कई वर्गों का सामना करने वाले हैं ...

इसलिए मुझे लगता है कि Zend फ्रेमवर्क अधिक जटिल है, क्योंकि यह बहुत डिकूप्ड है और आप इसकी कक्षाओं का उपयोग अन्य परियोजनाओं में कर सकते हैं जो ZF का उपयोग नहीं करते हैं।


3

Zend फ्रेमवर्क को OOP और डिजाइन पैटर्न में कुछ ठोस आधार की आवश्यकता होती है। अपने अनुभव से, मैं केवल अनुभवी जावा-जेईई-स्ट्रट्स-स्प्रिंग प्रोग्रामर पाता हूं जो आसानी से ज़ेंड फ्रेमवर्क से परिचित हो जाते हैं। औसत PHP डेवलपर को Zend फ्रेमवर्क के पीछे अवधारणाओं और वास्तुकला को पचाने में मुश्किल होती है। लेकिन देखिये अरे! Zend फ्रेमवर्क कंपनी 'Zend' से आता है जो पहले स्थान पर PHP बनाता है। तो यह कुछ विचार की जरूरत है शायद सम्मान नहीं!


1
रासमस लेरडोर्फ ने php बनाया, zend php का एक उच्च समर्थक है। मैं क्या याद से
सरमन बी।

वहाँ असहमत नहीं हो सकता। एक जावा डेवलपर Im। मैंने न केवल ZF में अपना रास्ता आसानी से पाया, बल्कि अन्य रूपरेखाओं को भी प्राथमिकता दी।
jkushner

-2

मेरा मानना ​​है कि zend सिर्फ चीजों को जटिल बनाने के लिए है, MVC सिर्फ एक धोखाधड़ी है जो तार्किक रूप से सादे PHP की तरह काम कर रहा है। लेकिन आप इसे MVC के सामने विकसित कर रहे हैं, जैसे विभिन्न निर्देशिकाओं में फ़ाइलों को अलग करना।

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

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

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


-6

कम से कम "त्वरित शुरुआत" वाली बात को फ्रेमवर्क के अनुकूल बनाने के लिए आसान होना चाहिए ..... यदि आप एक बेहतर चीज़ के रूप में कुछ कठिन पसंद करते हैं तो मैं कहूंगा "ZF सबसे अच्छा PHP फ्रेमवर्क है", अन्यथा नहीं। मैंने ZF-2 डाउनलोड किया है और इसे आज़माया है (ईमानदारी से मैं ZF के लिए नौसिखिया हूँ)। दुख की बात यह है कि मुझे अभी भी इंटरनेट पर एक साधारण प्रोजेक्ट कंकाल के साथ एक ठोस "त्वरित शुरुआत मार्गदर्शिका" नहीं मिली है। सभी मैं देख रहा हूँ पुस्तकालय की फ़ाइलों को शामिल करने और MVC सुविधाओं के साथ एक परियोजना फ़ोल्डर बनाने का सरल तरीका है। मैंने Codeigniter, Cake php, Yii का उपयोग किया है लेकिन मुझे यह बहुत अच्छा नहीं लगा। हाँ, मुझे पता है कि Zend उन्नयन PHP है, लेकिन इसका मतलब यह नहीं है कि यह सबसे अच्छा ढांचा है या आप जो भी कहेंगे।


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