마 젠토 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"를 사용하여 클래스를 가져와 실제 코드를보다 간결하고 읽기 쉽게 만들 것을 제안합니다.


따라서 핵심 팀이 use내가 지정한 특정 클래스 에 대해 추가 한 점이 없다는 것을 분명히하기 위해 ?
디지털 피아니즘의 라파엘

1
아니오. 나에게 자동 완성을 사용할 때 use 문을 자동으로 추가하는 IDE를 사용하는 누군가가 나중에 추가 한 것처럼 보입니다.
Fabian Schmengler

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

제 생각에 두 번째 예는 읽기 쉽습니다. (그러나 솔직히 말하면 여기에 상수 대신 변수를 사용하여 가독성을 높이는 것이 좋습니다.)

마 젠토 2 API 인터페이스

M2 자동 노출 API 엔드 포인트에 관한 통지가 있습니다. REST / SOAP 메소드에 사용되는 인터페이스에서는 항상 FQN을 사용해야합니다.

주석은 Magento Framework에서 구문 분석하여 JSON 또는 XML과의 데이터 변환 방법을 결정합니다.

클래스 가져 오기 (즉, 클래스 위의 use 문)는 적용되지 않습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.