PHP के नामस्थानों का मूल्यांकन


11

मैं एक ओपन-सोर्स PHP प्रोजेक्ट के प्री-रिलीज़ चरण में हूं, जो मुझे आशा है कि अन्य डेवलपर्स द्वारा अपनी परियोजनाओं में उपयोग किया जाएगा। परियोजना वर्तमान में नामस्थानों का समर्थन नहीं करती है और मैं मूल्यांकन करने का प्रयास कर रहा हूं कि क्या यह नामस्थान या PE_ नामकरण परंपरा का उपयोग करना चाहिए Dir_Subdir_Class, जो कुछ कमियों के बिना एक ही तकनीकी लाभ के सभी लगता है। सच कहूँ तो, यह एक आसान विकल्प नहीं है।

नेमस्पेस के खिलाफ विचार के कुछ बिंदु:

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

नाम स्थान का उपयोग करने के लिए कुछ बिंदु:

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

जो मैं बता सकता हूं, उसमें से आपको एक रास्ता या दूसरा चुनना होगा; तुम दोनों नहीं कर सकते। क्या ऐसे कोई बिंदु हैं जिन पर मैंने विचार नहीं किया है? वहाँ किसी भी उद्देश्य के संकेत (कोई flamewars, कृपया) कि PHP के लिए पेशेवर मानक बनने नामस्थान की ओर या के खिलाफ बात कर रहे हैं? मैं किसी भी अंतर्दृष्टि या संसाधनों की सराहना करता हूं जिसे आप साझा करने के लिए तैयार होंगे क्योंकि मुझे जल्द ही निर्णय लेने की आवश्यकता है।

जवाबों:


5

पीएचपी में नाम स्थान के दो संकेत यहाँ रहने के लिए हैं:

  1. PEAR2 में नाम स्थान के पक्ष में PEAR नामकरण योजना को छोड़ दिया गया था ।
  2. Zend फ्रेमवर्क 2.0 के घोषित लक्ष्यों में से एक PHP 5.3 उपयोग का एक अनुकरणीय होना है , अन्य चीजों के अलावा, नामस्थानों का पूरी तरह से उपयोग करके। मैं इसे एक मजबूत संकेत के रूप में मानता हूं कि ज़ेंड नामस्थानों के लिए पूरी तरह से प्रतिबद्ध है और उनका समर्थन करना और उन्हें विकसित करना जारी रखेगा (उम्मीद है कि बेहतर)।

मैं आपसे पूरी तरह सहमत हूं कि नाम स्थान के मौजूदा कार्यान्वयन में कमी है, कम से कम कहने के लिए, लेकिन उनका उपयोग करने के खिलाफ आपके तर्क इतने ठोस नहीं हैं। यहां तक ​​कि उनके वर्तमान रूप में, नाम स्थान के लिए प्रदान करते हैं:

  • बेहतर कोड संगठन,
  • नामकरण टकराव से बचने,
  • कक्षाओं, कार्यों और स्थिरांक के लिए संदर्भ।

ध्यान रखें कि PHP नेमस्पेस के खिलाफ अधिकांश तर्क अन्य भाषाओं में कार्यान्वयन की तुलना में हैं और एक विशेषता के रूप में उनके वास्तविक गुणों के खिलाफ नहीं हैं।


लिंक के लिए +1। क्या आप बेहतर कोड संगठन और संदर्भ बिंदुओं पर विस्तार कर सकते हैं? मुझे यह समझने में थोड़ी मुश्किल है कि यह बेहतर कोड संगठन कैसे प्रदान करता है। ऐसा लगता है कि अधिकांश परियोजनाएं तार्किक निर्देशिकाओं में वर्गीकृत संरचना को दर्ज करने के लिए 1: 1 वर्ग से चिपके रहेंगी, जैसा कि आप PEAR नामकरण योजना में उपयोग करेंगे। यहां तक ​​कि ZF2 ऐसा लगता है कि यह ज्यादातर मामलों में समान निर्देशिका और फ़ाइल संरचनाओं का उपयोग कर रहा है, लेकिन अभी नामस्थान के साथ। यह अलग है, लेकिन मैं यह नहीं देखता कि पहले स्थान पर अच्छी तरह से नामित निर्देशिकाओं और फाइलों की तुलना में यह कैसे बेहतर या अधिक व्यवस्थित है।
पुण्योसोमीडिया

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

@VirtuosiMedia PEAR और पुरानी ZF नामकरण योजनाएं नामस्थानों का अनुकरण करती हैं , इसलिए मेरे तीन बिंदु उनके लिए भी कुछ हद तक सही हैं। मैं जो इंगित करने की कोशिश कर रहा हूं वह यह है कि अगर PHP के नामस्थानों के वर्तमान कार्यान्वयन में वे बिंदु सही हैं, तो उनके छोटे स्नैफस उनका उपयोग नहीं करने के लिए पर्याप्त नहीं हैं। साथ बेहतर कोड संगठन मैं फ़ाइलों में ज्यादातर मतलब है, एक समझदार और तार्किक संरचना और अपनी कक्षाओं के लिए पदानुक्रम, कुछ नामस्थान के बिना पाठ्यक्रम संभव की बात यह है कि गोद लेने। लेकिन नाम स्थान (और योजनाएं जो उन्हें अनुकरण करती हैं) एक ऐसी विशेषता है जो आपको एक साथ सभी तीन बिंदुओं को प्राप्त करने में मदद करती है।
यानिस

पकड़ लिया। स्पष्टीकरण के लिए धन्यवाद। आप के लिए महत्वपूर्ण लाभ दिखाई दे रही है वास्तविक से अधिक नामस्थान नकल करते नामस्थान?
वर्चुओसीमीडिया

1
@VirtuosiMedia आपके द्वारा प्रश्न पर बनाए गए नामस्थान का उपयोग करने के सभी बिंदु मान्य हैं। इसमें मैं यह जोड़ूंगा कि PHP नामस्थान आपके कोड को अलग-अलग पृष्ठभूमि से कोडर्स के लिए थोड़ा और स्वाभाविक महसूस करने में मदद करता है, कुछ ऐसा जो एक बड़े प्रोजेक्ट में अमूल्य हो सकता है। इसके अलावा उत्सर्जित नामस्थानों के लिए कोई मानक नहीं है , यकीन है कि उनमें से अधिकांश समान हैं लेकिन वास्तविक नामस्थानों का उपयोग यह सुनिश्चित करता है कि हर कोई एक ही स्कीमा का उपयोग कर रहा है। BTW वहाँ एक namepacer है वहाँ आप अपने कोड को नामांकित करने के लिए उपयोग कर सकते हैं।
यानि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.