Magento 2 कक्षा स्थानों और नामों के लिए सबसे अच्छा अभ्यास


15

में Magento 1हम इन निर्देशिका में हमारी कक्षाएं जगह इस्तेमाल किया गया

  • खंड मैथा
  • सहायक
  • नमूना
  • संसाधन

और नाम के बीच में बिना किसी बड़े अक्षरों के एक साधारण वर्ग के नाम का उपयोग करें।

अगर हम कुछ मामलों पर गौर करें Magento 2 Core

सहायकों

स्थान :
- \Foo\Bar\Helper
नाम :
- *.php
उदाहरण :
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


प्रेक्षकों

स्थान :
- \Foo\Bar\Observer
नाम :
- *.php
- *Observer.php
उदाहरण :
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


प्लगइन्स

स्थान :
- \Foo\Bar\Plugin
नाम :
- *.php
- *Plugin.php
उदाहरण :
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
स्रोत : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


ConfigProvider

स्थान :
- \Foo\Bar\Model
नाम :
- *ConfigProvider.php
उदाहरण :
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


मेरे प्रश्न हैं:

  • यदि उसके लिए कोई good/ bad/ bestप्रथा है Magento 2?
  • अगर मैं DataProviderउदाहरण के लिए एक प्रथा बनाना चाहता हूं तो यह क्या होगा?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • वर्ग के नाम और स्थान के निर्माण का निर्धारण कैसे करें, मॉड्यूल की जड़ में एक फ़ोल्डर, मॉडल में, हेल्पर, आदि में?
  • क्या यह पुनर्प्राप्त डेटा स्रोत / डेटा प्रकार पर निर्भर करता है?
  • हमें वर्ग नाम में प्रत्यय कब जोड़ना है?


के लिए प्रतिक्रिया का एक हिस्सा Virtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

जवाबों:


10

Magento 2 केवल कुछ फ़ोल्डर्स जैसे ब्लॉक, हेल्पर, मॉडल और इतने पर Magento 1 के रूप में प्रतिबंधित नहीं है।
आप मूल रूप से अपने इच्छित किसी भी फ़ोल्डर में एक वर्ग रख सकते हैं। यह आप पर निर्भर है क्योंकि क्लास फुल क्लास के नाम का उपयोग करते हुए तुरंत किया जाता है, जैसा कि मैगनेटो 1 में उपनामों के साथ नहीं है।

मेरी सिफारिश उन्हें कार्यक्षमता के आधार पर समूहित करने की है।

  • में पर्यवेक्षकों Vendor/Module/Observer
  • प्लग इन Vendor/Module/Plugin
  • में डेटा प्रदाताओं Vendor/Module/DataProvider
  • ui घटक संबंधित कक्षाओं में Vendor/Module/Ui

लेकिन नाम दोहराव से बचने की कोशिश करें। मेरा मतलब Vendor/Module/DataProvider/CustomDataProviderबेमानी होगा।

हो सकता है कि प्रत्यय केवल इंटरफेस के लिए जोड़ा जा सकता है, हालांकि लोग इसके खिलाफ बहस करेंगे।

संक्षेप में, यह आपके ऊपर है कि आप इसे कैसे करते हैं, बस इसमें सुसंगत रहें।

कार्यक्षमता के दृष्टिकोण से यह महत्वपूर्ण नहीं है कि आप कक्षाओं को कहाँ रखते हैं। आप भी उनके साथ पागल हो सकते हैं और उन सभी को सीधे Vendor/Moduleफ़ोल्डर में रख सकते हैं , लेकिन आप शायद ऐसा नहीं चाहते हैं।

मुझे लगता है (लेकिन पूरी तरह से निश्चित नहीं है) कि प्रतिबंध केवल फ़ोल्डर में होना चाहिए Controller


मैं मानता हूं कि हम पागल हो सकते हैं, यह एक अच्छा बिंदु है जितना कि एक बुरा है लेकिन जैसा कि आपने कहा कि यह चीजों को देखने के हमारे तरीके के अनुसार है। हो सकता है कि जब Magento अपने आंतरिक तकनीकी दर्शन साझा करता है जैसा कि MagentoLive फ़्रांस में घोषित किया गया है, तो हमें इन बिंदुओं पर अधिक जानकारी होगी। अपनी राय साझा करने के लिए धन्यवाद
Matthéo Geoffray

7

मुझे लगता है कि यह राय आधारित है, लेकिन मैं मानता हूं कि वर्ग नामकरण और M2 में स्थानों के बारे में कुछ विसंगतियां हैं।

यहाँ मैं फ़ोल्डर नामकरण के संबंध में सूची प्रस्तुत कर रहा हूँ। मेरे लिए आपको हमेशा उन फ़ोल्डरों का उपयोग करना चाहिए जब आप अपने मॉड्यूल को किसी और के लिए ब्राउज़ करना और समझना आसान बनाने के लिए कर सकते हैं:

  • खंड मैथा
  • नियंत्रक
  • नमूना
  • देखने वाला
  • सेट अप
  • परीक्षा
  • Ui
  • आदि
  • i18n
  • राय
  • क्रॉन
  • सहायक
  • कंसोल
  • एपीआई
  • लगाना
  • डेटा प्रदाता

उसके ऊपर, M2 कुछ बहुत विशिष्ट फ़ोल्डरों का उपयोग करता है, लेकिन मैंने उन्हें इस सूची में शामिल नहीं किया है:

  • मूल्य निर्धारण
  • ऐप
  • ग्राहक डेटा
  • सेवा
  • द्वार
  • फ़ाइलें
  • अनुकूलक
  • अंग
  • TemplateEngine

M2 के साथ अच्छी बात यह है कि आप जिस भी फोल्डर का उपयोग कर सकते हैं और बना सकते हैं। यदि ऊपर दी गई सूची में कुछ नहीं है, तो अपना स्वयं का फ़ोल्डर बनाएं और अपनी कक्षाओं को उनमें डाल दें, बस सुसंगत होने का प्रयास करें।


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

6

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

उदाहरण के लिए, उपयोग करने के बजाय Model/Config/Converter.php, नाम OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpबहुत कुछ कहता है कि एक मॉड्यूल और एक वर्ग क्या करता है।


जैसा कि आपने कहा कि हमारे लिए यह स्पष्ट करने के लिए और अधिक सोच की आवश्यकता है, लेकिन विस्तार को देखने वाले किसी के लिए भी। यह इस समय चीजों को कठिन बनाता है लेकिन समय के साथ अधिक प्रभावी होता है। आपके उत्तर के लिए धन्यवाद
Matthéo Geoffray

3

ऊपर पहले से ही कुछ बहुत अच्छे जवाब हैं। मैं यह जोड़ना चाहूंगा कि आपको कोड रखने से बचना चाहिए app/codeऔर इसके बजाय एक संगीतकार आधारित स्थापना विधि का उपयोग करना चाहिए जो आपके कोड को नीचे रखकर समाप्त हो जाएगी vendor/


हां चिंता मत करो मैं इसके बारे में जानता हूं, प्रारूप मेरे प्रश्न में उदाहरण के लिए है :) लेकिन आप उन लोगों के लिए सही हैं जो नहीं जानते कि मैं इसे स्पष्ट करने के लिए संपादित करूंगा। धन्यवाद
Matthéo Geoffray

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