Üretim Kalitesinde Özel Magento 2 Modülü Nasıl Yazılır
Üretim kalitesinde bir Magento 2 modülü doğru kayıt, veritabanı değişiklikleri için declarative schema, ObjectManager yerine bağımlılık enjeksiyonu, public API'ler için service contract ve testler gerektirir. Modülleri yükseltmede bozan iki hata: declarative schema atlamak ve ObjectManager sızdırmak.
Üretim kalitesinde bir Magento 2 modülü doğru kayıt, her veritabanı değişikliği için declarative schema, ObjectManager yerine bağımlılık enjeksiyonu, public API'ler için service contract, sınıf rewrite'ı yerine plugin ve otomatik testler gerektirir. Yükseltmede modülleri bozan iki hata declarative schema atlamak ve ObjectManager sızdırmaktır.
Özet
- Veritabanı için declarative schema (db_schema.xml) kullan, InstallSchema scriptleri değil — yükseltmelerden temiz geçer.
- Bağımlılıkları constructor üzerinden enjekte et; iş kodunda asla doğrudan
ObjectManagerçağırma. - İşlevselliği service contract'larla (Api/ arayüzleri) sun ki diğer modüller stabil API'lere bağımlı olsun.
- Yükseltme-güvenli kalmak için sınıf rewrite yerine plugin (interceptor) tercih et.
- Unit + integration testleri gönder; Magento'nun test çerçevesi DI ve schema regresyonlarını erken yakalar.
1. Kayıt ve tanım
Her modül registration.php ve etc/module.xml ile başlar. Modül bağımlılıklarını module.xml'de tanımla ki bağımlılık grafiği ve yükleme sırası açık olsun.
2. Veritabanı değişiklikleri: yalnızca declarative schema
Tabloları ve kolonları etc/db_schema.xml'de tanımla ve db_schema_whitelist.json üret. Declarative schema yükseltmeler arasında geri-alınabilir ve idempotenttir — eski modüllerin bozulmasının en büyük sebebi artık çalışmayan eski InstallSchema/UpgradeSchema scriptleridir.
3. ObjectManager yerine bağımlılık enjeksiyonu
Bağımlılıkları constructor'da type-hint et ve Magento'nun DI konteynerinin sağlamasına izin ver. Doğrudan ObjectManager::getInstance() çağrıları bağımlılıkları gizler, test edilebilirliği bozar ve Magento kodlama standartlarınca işaretlenir.
4. Public olan her şey için service contract
Mantığını başka modüller (veya kendi frontend/API'in) tüketiyorsa, Api/ ve Api/Data/ altındaki arayüzlerle, di.xml'de bağlanmış olarak sun. Service contract'lar stabil bir yüzey verir ve REST/GraphQL açmayı kolaylaştırır.
5. Davranışı rewrite ile değil plugin ile genişlet
Çekirdek davranışı değiştirmek için before/after/around plugin kullan. Sınıf preference (rewrite) diğer modüllerle çakışır ve yükseltmede değişiklikleri sessizce kaybeder. around'u idareli kullan — en yüksek performans maliyeti onda.
6. Test et
Saf mantık için unit, DI bağlama ve schema için integration testleri ekle. Testsiz modül, sonraki platform yükseltmesinde sessizce bozulan modüldür.
Devredilebilir bir standartta yaptırmak ister misin? Magento / Hyvä Mühendisliği ya da teklif iste.
Sıkça sorulan sorular
Magento 2'de declarative schema ile setup scriptleri arasındaki fark nedir?
Declarative schema (db_schema.xml) istenen veritabanı durumunu tanımlar ve Magento değişiklikleri hesaplar; bu yüzden idempotent ve yükseltme-güvenlidir. Eski InstallSchema/UpgradeSchema scriptleri imperatif çalışır ve sonraki sürümlerde sık sık çalışmayarak modülleri bozar.
Magento 2'de plugin mi rewrite mı kullanmalıyım?
Neredeyse her durumda plugin (interceptor) kullan. Sınıf rewrite (preference) iki modül aynı sınıfı hedeflediğinde çakışır ve yükseltmede değişiklikleri sessizce düşürebilir. around-plugin'leri yalnızca gerçekten gerektiğinde kullan çünkü en çok performans yükünü taşır.
Magento 2'de neden doğrudan ObjectManager kullanımı önerilmez?
Doğrudan ObjectManager çağrıları bir sınıfın gerçek bağımlılıklarını gizler, unit testi zorlaştırır ve Magento kodlama standartlarını ihlal eder. Bunun yerine bağımlılıkları constructor üzerinden enjekte et ve DI konteynerinin çözmesine izin ver.
Magento 2 modülleri test gerektirir mi?
Üretim için evet. Unit testler iş mantığını, integration testler bağımlılık enjeksiyonu ve schema'yı kapsar. Testler, bir Magento platform yükseltmesi modülü üretimde bozmadan önce regresyonları yakalamanın en ucuz yoludur.
Wizutech Admin
Wizutech Engineering
// Sonraki adım
Kendi vaka çalışmanıza
hazır mısınız?
Buradaki her yazı bir görüşmeyle başladı. Siz de mevcut sisteminizden bahsedin.