Magento 2 DI en iyi uygulamaları


19

Diyelim ki bir Magento 2 uzantısı geliştiriyorum ... iyi ... önemli değil. Diyelim ki süper harika şeyler yapıyor.
Ancak bunun diğer geliştiricilerin genişletebilmesi için uygun standartlar kullanılarak oluşturulduğundan emin olmak istiyorum.

DI'yi arayüzlerle birlikte ne zaman kullanmalıyım ve ne zaman kullanmamalıyım?
Burada açıklığa kavuşturmak temel bir örnektir.

Sınıf Magento\Core\Helper\Databöyle bir kurucuya sahiptir:

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;
}

Sorum var var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig(aynı yapıcıda başkaları olduğunu biliyorum, ama bir açıklama bence tüm vakalara uyacaktır).

Göre di.xmlçekirdek modülünden var bir örneği olacaktır Magento\Framework\App\Config:

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

ama ihtiyacım olursa bunu kolayca değiştirebilirim.

Kodumda böyle arayüzleri ne zaman kullanmalıyım?
Bu tür arayüzleri kullandığım bu eksik örnek modülü (reklam için özür dilerim) oluşturdum , ancak hepsi çekirdekten geliyor. Ben kendiminkini yaratmadım. Yapmalımıyım?


"Diyelim ki süper harika şeyler yapıyor." Stackexchange'te çevrimiçi olan yüzen bir kafaları var mı? Çünkü ben bunu
David Manners

1
@DavidManners Tüm 1.x uzantılarımı 2.0'a taşımaya çalışacağım, böylece de taşınacak. Yüzen kısmı bilmiyorum, ama ne yapabileceğimi göreceğim.
Marius

Imho bu Mage2'ye özgü bir soru değil, daha genel olarak "Arayüzler ne zaman kullanılır". Bu, birisinin uzantınızı genişletmesini istediğiniz yere bağlıdır. Değişen her yerde iş mantığıyla çalıştığınızı söyleyebilirim. ;) Ayrıca, davranışı olmayan nesneler (örneğin basit veri nesneleri) genellikle değişmez.
Tobias

1
@TobiasZander, neredeyse HER ŞEY için bir arayüz oluşturmam gerektiğini mi söylüyorsun? Kahretsin bu çok iş.
Marius

@Marius,% 100 esnek olmak istiyorsanız, bir şekilde evet. Ama ben aşırı mühendislik yapmam. Şahsen ben de yararlı olduğunda odetocode.com/blogs/scott/archive/2009/06/08/… giriş olarak seviyorum
Tobias

Yanıtlar:


9

Imho bu Mage2'ye özgü bir soru değil, daha genel olarak "Arayüzler ne zaman kullanılır". Bu, birisinin uzantınızı genişletmesini istediğiniz yere bağlıdır. Değişen her yerde iş mantığıyla çalıştığınızı söyleyebilirim. ;) Ayrıca, davranışı olmayan nesneler (örneğin basit veri nesneleri) genellikle değişmez.

% 100 esnek olmak istiyorsanız, bir şekilde her yerde arayüz kullanmanız gerekir. Ama ben aşırı mühendislik yapmam. Şahsen http://odetocode.com/blogs/scott/archive/2009/06/08/when-do-i-use-interfaces.aspx'i gerçekten kullanışlı olduğunda bir giriş olarak beğeniyorum .


7

Magento2, SOLID ilkelerinin kullanımını teşvik eder .

Bağımlılık ters çevirme ilkesi doğrudan, kodun soyutlamalara (arayüzler) bağlı olması gerektiğini söylüyor.

Arabirim ayırma ilkesi, istemciye özgü birçok arabirimin bir genel amaçlı arabirimden daha iyi olduğunu söylüyor. Sınıflar ayrıca korumalı arayüzü tanımlayabilir, böylece arayüzler mimari açıdan daha çok tercih edilir.

Ayrıca PHP, sınıfların birden fazla mirasını desteklemez, ancak arabirimlerin birden çok uygulamasını destekler. Bu arayüzler için bir nokta daha.

Yani, basit bir kural kullanılabilir: ne kullanacağınızı bilmiyorsanız, DAİMA arayüzler kullanın .

PS. Performans arayüzler kullanmamın sebebi değil


Arayüz kullanımının performansı herhangi bir şekilde etkileyip etkilemediğini merak ediyorum.
amitshree

1
Otomatik yükleme işlevinin çağrısı ücretsiz değildir. örneğe bakın: ( dl.dropboxusercontent.com/u/3103646/… )
KAndy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.