الماجنتو 2:استخدم العبارة مقابل مسار الفصل المباشر?

magento.stackexchange https://magento.stackexchange.com/questions/106096

سؤال

قد أكون في عداد المفقودين نقطة ولكن أنا فقط أتساءل لماذا في بعض الأحيان هناك عبارة "استخدام" لفئة معينة وأحيانا لا نفعل ذلك.

مثال: 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 صف دراسي ?
هل كانت مفيدة؟

المحلول

لا يوجد سبب تقني لتفضيل أحدهما على الآخر ، إلا إذا كان هناك تعارض في الأسماء (مثل فئات "السياق" المختلفة).ولكن يمكن حلها بأسماء مستعارة وهذا ما أفعله عادة:

use Magento\Framework\Model\Context as ModelContext;

I افترض تم إنشاء العديد من الطرق الأساسية ، وخاصة المنشئات ، بواسطة أدوات مثل أداة التحويل في البداية ثم لم يتم تغييرها لاحقا لاستخدام واردات "الاستخدام".

لذلك أود أن أقترح أنه في التعليمات البرمجية الخاصة بك كنت دائما استيراد الطبقات مع "استخدام" لجعل التعليمات البرمجية الفعلية أقل مطول وأكثر قابلية للقراءة.

نصائح أخرى

يعتمد الاستخدام على موقف معين.نهجي هو:

الفئة المذكورة مرة واحدة فقط داخل ملف - فبن

ترك اسم مؤهل بالكامل.هذا يحسن قابلية القراءة لأنك لست بحاجة إلى إلقاء نظرة على استخدام القسم مرة أخرى.

اسم الفئة المستخدمة عدة مرات - استيراد

وضعه في استخدام القسم.هذا يجعل الكود أقصر حيث يتم ذكر الفصل.

الطبقة المستخدمة مرة واحدة ولكن أنا بحاجة إلى تدوين قصيرة - استيراد

شرح أفضل مع مثال.

فبن

$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})"]
           );

في رأيي المثال 2 هو أسهل للقراءة.(ولكن بصراحة كنت تفضل استخدام المتغيرات بدلا من الثوابت هنا لإعطائها المزيد من القراءة.)

الماجنتو 2 واجهات أبي

هناك إشعار بخصوص م2 نقاط نهاية واجهة برمجة التطبيقات المكشوفة تلقائيا.في واجهات تستخدم لطرق ريست / سواب يجب عليك دائما استخدام فنس.

يتم تحليل التعليقات التوضيحية من قبل إطار الماجنتو لتحديد كيفية تحويل البيانات من وإلى جسون أو شمل.

لا يتم تطبيق واردات الفئة (أي استخدام العبارات فوق الفئة)!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top