Magento 2: प्रत्यक्ष वर्ग पथ बनाम कथन का उपयोग करें?


14

मुझे एक बिंदु याद आ रहा है लेकिन मैं सोच रहा हूं कि कभी-कभी एक विशिष्ट वर्ग के लिए "उपयोग" बयान क्यों होता है और कभी-कभी हम नहीं करते हैं।

उदाहरण: app\code\Magento\Email\Model\Template.phpहमारे पास फ़ाइल के शीर्ष पर है:

namespace Magento\Email\Model;

use Magento\Store\Model\ScopeInterface;
use Magento\Store\Model\StoreManagerInterface;

फिर __constructविधि में हमारे पास निम्नलिखित पैरामीटर हैं:

public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\View\DesignInterface $design,
    \Magento\Framework\Registry $registry,
    \Magento\Store\Model\App\Emulation $appEmulation,
    StoreManagerInterface $storeManager,
    \Magento\Framework\View\Asset\Repository $assetRepo,
    \Magento\Framework\Filesystem $filesystem,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Email\Model\Template\Config $emailConfig,
    \Magento\Email\Model\TemplateFactory $templateFactory,
    \Magento\Framework\Filter\FilterManager $filterManager,
    \Magento\Framework\UrlInterface $urlModel,
    \Magento\Email\Model\Template\FilterFactory $filterFactory,
    array $data = []
)

इसलिए हम स्पष्ट रूप से देख सकते हैं कि जैसा कि हमने use Magento\Store\Model\StoreManagerInterface;कक्षा के शीर्ष पर बुलाया था, हम StoreManagerInterface $storeManagerनिर्माण मापदंडों में करने में सक्षम हैं ।

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

  • हम केवल एक वर्ग के लिए ऐसा क्यों करते हैं?
  • हम useकंस्ट्रक्टर के हर वर्ग के लिए एक बयान क्यों नहीं जोड़ सकते हैं ताकि हमें पूरी क्लास का रास्ता न लिखना पड़े?
  • या दूसरे तरीके से, क्यों हम useबयान से छुटकारा नहीं पाते हैं और StoreManagerInterfaceक्लास का पूरा रास्ता टाइप करते हैं ?

जवाबों:


15

कोई एक दूसरे पर पसंद करने का कोई तकनीकी कारण नहीं है, सिवाय इसके कि अगर नाम संघर्ष (जैसे "अलग-अलग" कक्षाएं) हैं। लेकिन उन लोगों को उपनाम के साथ हल किया जा सकता है और यही मैं आमतौर पर करता हूं:

use Magento\Framework\Model\Context as ModelContext;

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

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


तो बस यह स्पष्ट करने के लिए कि कोई बिंदु नहीं है जो कोर टीम ने useविशिष्ट वर्ग के लिए जोड़ा है जो मैंने सही बताया है?
राफेल डिजिटल पियानोवाद

1
नहीं। ऐसा लगता है कि यह बाद में किसी ऐसे व्यक्ति द्वारा जोड़ा गया है जो एक आईडीई का उपयोग करता है जो स्वतः पूर्णता का उपयोग करते समय स्वचालित रूप से बयान जोड़ता है।
फाबियन शेंगलर

2

उपयोग विशिष्ट स्थिति पर निर्भर करता है। मेरा दृष्टिकोण है:

एक फ़ाइल के अंदर सिर्फ एक बार क्लास का उल्लेख किया गया है - FQN

पूरी तरह से योग्य नाम छोड़ दें । यह पठनीयता में सुधार करता है क्योंकि आपको फिर से उपयोग अनुभाग देखने की आवश्यकता नहीं है ।

कई बार वर्ग नाम का उपयोग किया गया - आयात

इसे एक उपयोग अनुभाग में रखें । यह कोड को छोटा बनाता है जहां कक्षा का उल्लेख किया गया है।

एक बार उपयोग किया गया वर्ग लेकिन मुझे एक छोटी संकेतन - आयात की आवश्यकता है

एक उदाहरण के साथ बेहतर समझा।

FQN

$collection->getSelect()
           ->joinInner(['campaign_products' => $subSelect],
               'campaign_products.product_id = e.entity_id',
               [self::FIELD_SORT_ORDER => "IFNULL(IF(0 = " . \Custome\Module\Api\Data\ProductListInterface::SORT_ORDER . ", NULL, " . \Custome\Module\Api\Data\ProductListInterface::SORT_ORDER . "), {$defaultSortValue})"]
           );

आयात

$collection->getSelect()
           ->joinInner(['campaign_products' => $subSelect],
               'campaign_products.product_id = e.entity_id',
               [self::FIELD_SORT_ORDER => "IFNULL(IF(0 = " . ProductListInterface::SORT_ORDER . ", NULL, " . ProductListInterface::SORT_ORDER . "), {$defaultSortValue})"]
           );

मेरी राय में दूसरा उदाहरण पढ़ना आसान है। (लेकिन ईमानदारी से कहूं तो मैं यहां स्थिरांक के बजाय चर का उपयोग करना पसंद करूंगा ताकि इसे और भी अधिक पठनीयता मिल सके।)

Magento के 2 एपीआई इंटरफेस

एम 2 ऑटो-एक्सपोज़्ड एपीआई एंडपॉइंट के बारे में एक सूचना है। REST / SOAP विधियों के लिए उपयोग किए जाने वाले इंटरफेस में आपको हमेशा FQN का उपयोग करना चाहिए।

JSON या XML से डेटा को कनवर्ट करने का तरीका निर्धारित करने के लिए एनोटेशन को Magento फ्रेमवर्क द्वारा पार्स किया जाता है।

क्लास इंपोर्ट (यानी क्लास के ऊपर स्टेटमेंट का इस्तेमाल करें) लागू नहीं होते हैं!

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