Sınıf yerleri ve isimleri için Magento 2 en iyi uygulaması


15

Gelen Magento 1bu dizinlerde bizim sınıfları yerleştirmek için kullanıldı

  • Blok
  • Yardımcı
  • model
  • Kaynak

ve adın ortasında büyük harf içermeyen basit bir sınıf adı kullanın.

Bazı vakalara bakarsak Magento 2 Core

Yardımcılar

Yer :
- \Foo\Bar\Helper
İsim :
- *.php
Örnekler :
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


Gözlemciler

Yer :
- \Foo\Bar\Observer
İsim :
- *.php
- *Observer.php
Örnekler :
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


eklentiler

Yer :
- \Foo\Bar\Plugin
İsim :
- *.php
- *Plugin.php
Örnekler :
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
Kaynak : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


ConfigProvider

Yer :
- \Foo\Bar\Model
İsim :
- *ConfigProvider.php
Örnekler :
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


Sorularım:

  • Bunun için herhangi bir good/ bad/ bestuygulama varsaMagento 2 ?
  • DataProviderÖrneğin bir özel oluşturmak istersem ne olacak?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • Sınıf adının ve konumunun, modülün kökündeki bir klasörün, Modelde, Yardımcıda vb.
  • Alınan veri kaynağına / veri türüne bağlı mı?
  • Sınıf adına son eki ne zaman eklememiz gerekir?


Bir yanıtın bir parçası Virtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

Yanıtlar:


10

Magento 2, Magento 1 olarak sadece blok, yardımcı, model vb. Gibi birkaç klasörle sınırlı değildir.
Temel olarak, istediğiniz herhangi bir klasöre bir sınıf yerleştirebilirsiniz. Sınıf Magento 1'deki gibi takma adlarla değil, tam sınıf adı kullanılarak başlatıldığından size kalmış.

Benim tavsiyem onları işlevselliğe göre gruplandırmak.

  • gözlemciler Vendor/Module/Observer.
  • eklentileri Vendor/Module/Plugin
  • içindeki veri sağlayıcılar Vendor/Module/DataProvider.
  • ui bileşeni ile ilgili sınıflar Vendor/Module/Ui

ancak ad yinelemekten kaçının. Demek istediğimVendor/Module/DataProvider/CustomDataProvider gereksiz olur.

Belki de sonek, yalnızca arayüzler için eklenebilir, ancak insanlar buna karşı çıksa da.

Özetlemek gerekirse, bunu nasıl yapacağınız size kalmış, sadece tutarlı olun.

İşlevsel açıdan sınıfları nereye yerleştirdiğiniz önemli değildir. Hatta onlarla delirebilir ve hepsini doğrudanVendor/Module klasöre yerleştirebilirsiniz, ancak muhtemelen bunu istemezsiniz.

Sanırım (ama tamamen emin değilim) tek kısıtlama denetleyicileri klasörde olması gerektiğidir Controller.


Delirebileceğimize katılıyorum, kötü bir nokta kadar iyi bir nokta ama söylediğiniz gibi şeyleri görme şeklimize göre. Belki de Magento, MagentoLive France'da açıklandığı gibi dahili teknik vizyonlarını paylaştığında, bu noktalar hakkında daha fazla bilgi sahibi
olacağız Düşüncelerinizi

7

Bu fikre dayalı olduğunu düşünüyorum ama M2'deki sınıf adlandırması ve konumları ile ilgili bazı tutarsızlıklar olduğunu kabul ediyorum.

Klasör adlandırma ile ilgili bulduğum liste. Bana göre, modülünüzün başkalarına daha kolay göz atmasını ve anlamasını kolaylaştırmak için her zaman bu klasörleri kullanmalısınız:

  • Blok
  • kontrolör
  • model
  • Gözlemci
  • Kurmak
  • Ölçek
  • Ui
  • vb
  • i18n
  • görünüm
  • cron
  • Yardımcı
  • konsol
  • Api
  • Eklenti
  • DataProvider'ın

Bunun da ötesinde M2 ​​bazı çok özel klasörler kullanıyor, ancak bunları bu listeye dahil etmedim:

  • Fiyatlandırma
  • Uygulama
  • Müşteri bilgisi
  • Hizmet
  • geçit
  • Dosyalar
  • adaptör
  • Bileşen
  • TemplateEngine

M2 ile iyi bir şey, ihtiyacınız olan herhangi bir klasörü kullanabilmeniz ve oluşturabilmenizdir. Bir şey yukarıdaki listeye ait değilse, kendi klasörünüzü oluşturun ve sınıflarınızı bunlara koyun, tutarlı olmaya çalışın.


Tüm cevaplarınızda aynı fikri, istediğimiz gibi yapma olasılığını, en önemlisi yapımında tutarlı ve düzenli kalmayı buluyoruz. Bununla birlikte, Magento'nun ML'ye açıkladıkları gibi bu konuda bazı iç vizyonları paylaşması harika olurdu. Söylediğiniz gibi, herkesin Temel ve Topluluk uzantılarını anlaması daha kolay olacaktır. Cevabınız için teşekkürler.
Matthéo Geoffray

6

Bence en öncelikli kod mümkün olduğunca kendi kendine belgelendirme yapmak olmalıdır . Bu nedenle, her şeyi Model veya Yardımcı dizinlerine koymak yerine, altındaki kodun ne yaptığını açıklayan iyi bir ad bulmak daha iyi bir yaklaşımdır. Tabii ki, daha da zor çünkü daha fazla düşünmeyi gerektiriyor.

Örneğin Model/Config/Converter.php, isim kullanmak yerine , OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpbir Modül ve sınıfın yaptıklarından çok daha fazlasını söyler.


Söylediğiniz gibi, bizim için değil, aynı zamanda uzantıyı gören herkes için de açıklığa kavuşturmak için daha fazla düşünmek gerekiyor. Bu şu anda işleri zorlaştırıyor, ancak zamanla daha etkili hale getiriyor. Cevabınız için teşekkür ederiz
Matthéo Geoffray

3

Yukarıda zaten çok iyi cevaplar var. Ne eklemek istiyorum altında kod yerleştirmekten kaçınmalı app/codeve bunun yerine altında kod yerleştirerek bir besteci tabanlı kurulum yöntemi kullanmanızdır vendor/.


Evet endişelenmeyin, bunun farkındayım, biçim sadece sorumdaki örnek içindir :) Ama bunu netleştirmek için düzenleyeceğimi bilmeyen insanlar için haklısınız. Teşekkür ederim
Matthéo Geoffray

iyi nokta fooman bu
Amit Bera
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.