Magento 2 praktik terbaik untuk lokasi dan nama kelas

15

Di Magento 1kami terbiasa menempatkan kelas kami di direktori ini

  • Blok
  • Pembantu
  • Model
  • Sumber

dan menggunakan nama kelas sederhana tanpa huruf kapital di tengah nama.

Jika kita melihat beberapa kasus di Magento 2 Core

Pembantu

Lokasi :
- \Foo\Bar\Helper
Nama :
- *.php
Contoh :
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


Pengamat

Lokasi :
- \Foo\Bar\Observer
Nama :
- *.php
- *Observer.php
Contoh :
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


Plugin

Lokasi :
- \Foo\Bar\Plugin
Nama :
- *.php
- *Plugin.php
Contoh :
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
Sumber : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


ConfigProvider

Lokasi :
- \Foo\Bar\Model
Nama :
- *ConfigProvider.php
Contoh :
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


Pertanyaan saya adalah:

  • Jika ada good/ bad/ bestpraktik untuk itu di dalam Magento 2?
  • Jika saya ingin membuat custom DataProvidermisalnya apakah itu?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • Bagaimana menentukan konstruksi nama kelas dan lokasi, folder di akar modul, di Model, di Helper, dll?
  • Apakah itu tergantung pada sumber data yang diambil / tipe data?
  • Kapan kita harus menambahkan akhiran ke nama kelas?


Bagian dari respons untuk Virtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

Matthéo Geoffray
sumber

Jawaban:

10

Magento 2 tidak dibatasi sebagai Magento 1 hanya beberapa folder seperti blok, pembantu, model dan sebagainya.
Anda pada dasarnya dapat menempatkan kelas di folder apa pun yang Anda inginkan. Terserah Anda karena kelas dipakai menggunakan nama kelas penuh bukan dengan alias seperti di Magento 1.

Rekomendasi saya adalah mengelompokkannya berdasarkan fungsionalitasnya.

  • pengamat di Vendor/Module/Observer.
  • plugin Vendor/Module/Plugin
  • penyedia data di Vendor/Module/DataProvider.
  • ui komponen terkait kelas di Vendor/Module/Ui

tetapi cobalah untuk menghindari duplikasi nama. Maksud saya Vendor/Module/DataProvider/CustomDataProviderakan berlebihan.

Mungkin sufiks dapat ditambahkan hanya untuk antarmuka, meskipun orang akan membantahnya.

Untuk meringkas, terserah Anda bagaimana Anda melakukannya, cukup konsisten di dalamnya.

Dari sudut pandang fungsi, tidak penting di mana Anda menempatkan kelas. Anda bahkan bisa menjadi gila dengan mereka dan menempatkan semuanya langsung di Vendor/Modulefolder, tetapi Anda mungkin tidak menginginkannya.

Saya pikir (tetapi tidak sepenuhnya yakin) bahwa satu-satunya batasan adalah bahwa pengontrol harus ada di folder Controller.

Marius
sumber
Saya setuju kita bisa menjadi gila, ini adalah poin yang bagus dan juga buruk, tetapi seperti yang Anda katakan itu sesuai dengan cara kita melihat sesuatu. Mungkin ketika Magento membagikan visi teknis internal mereka seperti yang diumumkan di MagentoLive France, kami akan memiliki lebih banyak informasi tentang poin-poin ini. Terima kasih telah berbagi pendapat Anda
Matthéo Geoffray
7

Saya rasa itu berdasarkan pendapat tetapi saya setuju bahwa ada beberapa inkonsistensi mengenai penamaan kelas dan lokasi di M2.

Inilah daftar yang saya buat tentang penamaan folder. Bagi saya Anda harus selalu menggunakan folder-folder itu ketika Anda bisa agar modul Anda lebih mudah dijelajahi dan dipahami orang lain:

  • Blok
  • Pengendali
  • Model
  • Pengamat
  • Mempersiapkan
  • Uji
  • Ui
  • dll
  • i18n
  • melihat
  • Cron
  • Pembantu
  • Menghibur
  • Api
  • Plugin
  • Penyedia data

Selain itu, M2 menggunakan beberapa folder yang sangat spesifik tetapi saya belum memasukkannya dalam daftar ini:

  • Harga
  • Aplikasi
  • Data pelanggan
  • Layanan
  • pintu gerbang
  • File
  • Adaptor
  • Komponen
  • Mesin Templat

Hal yang baik dengan M2 adalah Anda dapat menggunakan dan membuat folder apa pun yang Anda butuhkan. Jika ada sesuatu yang tidak termasuk dalam daftar di atas, buat folder Anda sendiri dan letakkan kelas Anda di dalamnya hanya mencoba untuk konsisten.

Raphael di Digital Pianism
sumber
Dalam semua jawaban Anda, kami menemukan ide yang sama, kemungkinan untuk melakukan apa yang kami inginkan, yang paling penting adalah tetap konsisten dan teratur dalam konstruksinya. Namun akan sangat bagus bagi Magento untuk berbagi beberapa visi internal tentang hal ini ketika mereka mengumumkannya kepada ML. Seperti yang Anda katakan, akan lebih mudah bagi semua orang untuk memahami ekstensi Core dan Komunitas. Terima kasih atas jawaban anda.
Matthéo Geoffray
6

Saya pikir prioritas utama seharusnya membuat kode mendokumentasikan diri sendiri mungkin. Jadi, alih-alih memasukkan semuanya ke dalam direktori Model atau Helper, menemukan nama baik yang menggambarkan apa yang dilakukan kode di bawahnya adalah pendekatan yang lebih baik. Tentu saja, ini juga lebih sulit karena membutuhkan banyak pemikiran.

Sebagai contoh, daripada menggunakan Model/Config/Converter.php, nama OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpmengatakan lebih banyak apa yang Modul dan kelas lakukan.

Vinai
sumber
Seperti yang Anda katakan, perlu lebih banyak pemikiran untuk menjelaskannya bagi kami tetapi juga bagi siapa pun yang melihat ekstensi. Itu membuat segalanya lebih sulit saat ini tetapi lebih efektif dari waktu ke waktu. Terima kasih atas jawaban Anda
Matthéo Geoffray
3

Sudah ada beberapa jawaban yang sangat bagus di atas. Yang ingin saya tambahkan adalah bahwa Anda harus menghindari menempatkan kode di bawah app/codedan alih-alih menggunakan metode instalasi berbasis komposer yang akhirnya akan menempatkan kode Anda di bawah vendor/.

Kristof di Fooman
sumber
Ya jangan khawatir. Saya sadar akan hal itu, formatnya hanya untuk contoh dalam pertanyaan saya :) Tapi Anda tepat untuk orang-orang yang tidak tahu bahwa saya akan mengedit untuk membuatnya jelas. Terima kasih
Matthéo Geoffray
itu poin bagus fooman
Amit Bera