문제

Magento 2 Extension을 구축하고 있습니다 .... 음 ... 중요하지 않습니다. 멋진 물건을 말하자고 해보자.
그러나 다른 개발자가 확장 할 수 있도록 적절한 표준을 사용하여 빌드되는지 확인하고 싶습니다.

언제 인터페이스와의 조합에서 DI를 사용해야합니까?
여기서 맑게하기 위해서는 핵심 예입니다.

Class Magento\Core\Helper\Data에는 다음과 같은 생성자가 있습니다.

public function __construct(
    \Magento\Framework\App\Helper\Context $context,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    \Magento\Framework\App\State $appState,
    PriceCurrencyInterface $priceCurrency,
    $dbCompatibleMode = true
) {
    parent::__construct($context);
    $this->_scopeConfig = $scopeConfig;
    $this->_storeManager = $storeManager;
    $this->_appState = $appState;
    $this->_dbCompatibleMode = $dbCompatibleMode;
    $this->_priceCurrency =  $priceCurrency;
}
.

내 질문은 VAR \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig에 초점을 맞추고 있습니다 (동일한 생성자에 다른 사람이 있음을 알고 있지만, 내가 생각하는 모든 경우에 적합합니다).

코어 모듈의 di.xml에 따르면 var는 Magento\Framework\App\Config의 인스턴스가됩니다.

<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
.

그러나 필요할 경우 쉽게 변경할 수 있습니다.

언제 내 코드와 같은 인터페이스를 사용해야합니까?
나는이 불완전한 샘플 모듈 (광고 죄송합니다), 내가 그런 인터페이스를 사용했지만, 그들 모두는 핵심. 나는 내 자신 중 하나를 만들지 않았다. 내가해야 할까?

도움이 되었습니까?

해결책

IMHO는 Mage2 구체적인 질문이 아니며, 일반적으로 인터페이스를 사용할 때 "더 일반적으로"이는 누군가가 확장 프로그램을 확장 할 수 있는지 원하는 위치에 달려 있습니다.나는 당신이 바꿀 수있는 사업 논리로 일하는 곳에서 어디에서나 말할 것입니다.;) 동작이없는 객체 (예 : 간단한 데이터 객체)는 대개 변경되지 않습니다.

100 % 유연하게되기를 원한다면 어떻게 든 모든 곳에서 인터페이스를 사용해야합니다.그러나 나는 그것을 과도하게 엔지니어링하지 않을 것입니다.나는 또한 개인적으로 http://odetocode.com/블로그 / Scott / Archive / 2009 / 06 / 08 / 언제 Do-i-i-interfaces.aspx 실제로 유용 할 때 소개

다른 팁

Magento2는 솔리드 원칙

의존성 반전 원칙은, 그 코드는 추상화 (인터페이스)에 의존해야한다고 말한다.

인터페이스 분리 원칙은 많은 클라이언트 특정 인터페이스가 하나의 범용 인터페이스보다 낫다고 말합니다.클래스는 또한 보호 된 인터페이스를 정의 할 수 있으므로 아키텍처 관점에서 더 선호되는 인터페이스가 더욱 선호됩니다.

또한 PHP는 클래스의 여러 상속을 지원하지 않지만 여러 인터페이스 구현을 지원합니다.그것은 인터페이스에 대해 하나의 점입니다.

그래서 간단한 규칙을 사용할 수 있습니다 : 사용할 무엇을 모르는 경우, 항상 인터페이스를 사용하십시오

ps.성능 인터페이스를 사용하지 않는 이유가 아닙니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top