Magento 2 thực hành tốt nhất cho các địa điểm và tên lớp


15

Trong Magento 1chúng tôi đã được sử dụng để đặt các lớp học của chúng tôi trong các thư mục này

  • Khối
  • Người giúp đỡ
  • Mô hình
  • Nguồn

và sử dụng một tên lớp đơn giản mà không có bất kỳ chữ in hoa nào ở giữa tên.

Nếu chúng ta xem xét một số trường hợp trong Magento 2 Core

Người giúp việc

Địa điểm :
- \Foo\Bar\Helper
Tên :
- *.php
Ví dụ :
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


Quan sát viên

Địa điểm :
- \Foo\Bar\Observer
Tên :
- *.php
- *Observer.php
Ví dụ :
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


bổ sung

Vị trí :
- \Foo\Bar\Plugin
Tên :
- *.php
- *Plugin.php
Ví dụ :
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
Nguồn : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


Trình cấu hình

Địa điểm :
- \Foo\Bar\Model
Tên :
- *ConfigProvider.php
Ví dụ :
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


Câu hỏi của tôi là:

  • Nếu có bất kỳ good/ bad/ bestthực hành cho điều đó trong Magento 2?
  • Nếu tôi muốn tạo một tùy chỉnh DataProviderchẳng hạn thì nó sẽ là gì?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • Làm thế nào để xác định cấu trúc của tên lớp và vị trí, một thư mục ở thư mục gốc của mô-đun, trong Mô hình, trong Trình trợ giúp, v.v.?
  • Có phụ thuộc vào nguồn dữ liệu / loại dữ liệu?
  • Khi nào chúng ta phải thêm hậu tố vào tên lớp?


Một phần của câu trả lời cho Virtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convent/ba-p/61510

Câu trả lời:


10

Magento 2 không bị hạn chế như Magento 1 chỉ một vài thư mục như block, helper, model, v.v.
Về cơ bản bạn có thể đặt một lớp trong bất kỳ thư mục nào bạn muốn. Tùy thuộc vào bạn vì lớp được khởi tạo bằng tên lớp đầy đủ không có bí danh như trong Magento 1.

Đề nghị của tôi là nhóm chúng theo chức năng.

  • quan sát viên trong Vendor/Module/Observer.
  • bổ trợ Vendor/Module/Plugin
  • nhà cung cấp dữ liệu trong Vendor/Module/DataProvider.
  • các lớp liên quan thành phần ui trong Vendor/Module/Ui

nhưng cố gắng tránh trùng lặp tên. Tôi có nghĩa là Vendor/Module/DataProvider/CustomDataProvidersẽ dư thừa.

Có lẽ hậu tố chỉ có thể được thêm vào cho các giao diện, mặc dù mọi người sẽ tranh luận chống lại nó.

Tóm lại, tùy thuộc vào cách bạn thực hiện nó, chỉ cần nhất quán trong đó.

Từ quan điểm chức năng, việc bạn đặt các lớp học không quan trọng. Bạn thậm chí có thể phát điên với chúng và đặt tất cả chúng trực tiếp vào Vendor/Modulethư mục, nhưng có lẽ bạn không muốn điều đó.

Tôi nghĩ (nhưng không hoàn toàn chắc chắn) rằng hạn chế duy nhất là bộ điều khiển phải nằm trong thư mục Controller.


Tôi đồng ý rằng chúng ta có thể phát điên, đó là một điểm tốt cũng như một điểm xấu nhưng như bạn đã nói, đó là theo cách nhìn của chúng ta về mọi thứ. Có thể khi Magento chia sẻ tầm nhìn kỹ thuật nội bộ của họ như đã thông báo tại MagentoLive France, chúng tôi sẽ có thêm thông tin về những điểm này Cảm ơn bạn đã chia sẻ ý kiến ​​của bạn
Matthéo Geoffray

7

Tôi cho rằng đó là ý kiến ​​dựa trên nhưng tôi đồng ý rằng có một số điểm không nhất quán liên quan đến việc đặt tên lớp và địa điểm trong M2.

Đây là danh sách tôi đã đưa ra liên quan đến việc đặt tên thư mục. Đối với tôi, bạn nên luôn luôn sử dụng các thư mục đó khi bạn có thể để làm cho mô-đun của bạn dễ dàng duyệt và hiểu hơn đối với bất kỳ ai khác:

  • Khối
  • Bộ điều khiển
  • Mô hình
  • Người quan sát
  • Thiết lập
  • Kiểm tra
  • Ui
  • Vân vân
  • i18n
  • lượt xem
  • Cron
  • Người giúp đỡ
  • Bảng điều khiển
  • Api
  • Cắm vào
  • Nhà cung cấp dữ liệu

Trên hết, M2 sử dụng một số thư mục rất cụ thể nhưng tôi chưa đưa chúng vào danh sách này:

  • Giá cả
  • Ứng dụng
  • Dữ liệu khách hàng
  • Dịch vụ
  • Cổng
  • Các tập tin
  • Bộ chuyển đổi
  • Thành phần
  • Bản mẫu

Điều tốt với M2 là bạn có thể sử dụng và tạo bất kỳ thư mục nào bạn cần. Nếu một cái gì đó không thuộc danh sách trên, hãy tạo thư mục của riêng bạn và đặt các lớp của bạn vào chúng chỉ cần cố gắng nhất quán.


Trong tất cả các câu trả lời của bạn, chúng tôi tìm thấy cùng một ý tưởng, khả năng thực hiện như chúng tôi muốn, điều quan trọng nhất là duy trì sự nhất quán và thường xuyên trong quá trình xây dựng. Tuy nhiên, thật tuyệt vời khi Magento chia sẻ một số tầm nhìn nội bộ về điều này khi họ tuyên bố với ML. Như bạn đã nói, mọi người sẽ dễ dàng hiểu các tiện ích mở rộng Core và Community hơn. Cảm ơn câu trả lời của bạn.
Matthéo Geoffray

6

Tôi nghĩ ưu tiên hàng đầu là làm cho mã tự ghi lại càng tốt. Vì vậy, thay vì đặt mọi thứ vào các thư mục Model hoặc Helper, tìm một tên hay mô tả những gì mã bên dưới làm là một cách tiếp cận tốt hơn. Tất nhiên, nó cũng khó hơn vì nó đòi hỏi nhiều suy nghĩ hơn.

Ví dụ, thay vì sử dụng Model/Config/Converter.php, cái tên OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpnói lên nhiều hơn những gì Mô-đun và một lớp làm.


Như bạn đã nói, nó đòi hỏi nhiều suy nghĩ hơn để làm cho chúng tôi rõ ràng hơn nhưng cũng cho bất cứ ai nhìn thấy phần mở rộng. Điều đó làm cho mọi thứ khó khăn hơn vào lúc này nhưng hiệu quả hơn theo thời gian. Cảm ơn câu trả lời của bạn
Matthéo Geoffray

3

Đã có một số câu trả lời thực sự tốt ở trên. Những gì tôi muốn thêm là bạn nên tránh đặt mã bên dưới app/codevà thay vào đó sử dụng một phương pháp cài đặt dựa trên trình soạn thảo, cuối cùng sẽ đặt mã của bạn theo vendor/.


Có, đừng lo lắng, tôi biết điều đó, định dạng chỉ là ví dụ trong câu hỏi của tôi :) Nhưng bạn phù hợp với những người không biết rằng tôi sẽ chỉnh sửa để làm cho rõ ràng. Cảm ơn bạn
Matthéo Geoffray

đó là điểm tốt fooman
Amit Bera
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.