สมมติว่าฉันกำลังสร้างส่วนเสริม Magento 2 ที่ทำได้ .... ก็ดี ... ไม่สำคัญ สมมติว่ามันทำสิ่งที่ยอดเยี่ยมที่สุด 
แต่ฉันต้องการตรวจสอบให้แน่ใจว่านี่คือการสร้างโดยใช้มาตรฐานที่เหมาะสมเพื่อให้นักพัฒนารายอื่นสามารถขยายได้  
เมื่อใดที่ฉันควรใช้ DI ร่วมกับส่วนต่อประสานและเมื่อใดที่ฉันไม่ควรใช้ 
เพื่อให้ชัดเจนนี่คือตัวอย่างหลัก  
ชั้นเรียน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" />
แต่ฉันสามารถเปลี่ยนได้อย่างง่ายดายถ้าฉันต้องการ
เมื่อใดที่ฉันควรใช้อินเทอร์เฟซเช่นนั้นในรหัสของฉัน 
ฉันได้สร้างโมดูลตัวอย่างที่ไม่สมบูรณ์นี้(ขออภัยสำหรับการโฆษณา) ซึ่งฉันได้ใช้อินเทอร์เฟซดังกล่าว แต่ทั้งหมดมาจากแกนกลาง ฉันไม่ได้สร้างหนึ่งของฉันเอง ฉันควร?