수업 위치 및 이름에 대한 Magento 2 모범 사례


15

에서 Magento 1우리는이 디렉토리에 우리의 클래스를 배치하는 데 사용되었다

  • 블록
  • 돕는 사람
  • 모델
  • 자원

이름 중간에 대문자없이 간단한 클래스 이름을 사용하십시오.

우리가 어떤 경우를 살펴보면 Magento 2 Core

헬퍼

위치 :
- \Foo\Bar\Helper
이름 :
- *.php
:
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


관찰자

위치 :
- \Foo\Bar\Observer
이름 :
- *.php
- *Observer.php
:
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


플러그인

위치 :
- \Foo\Bar\Plugin
이름 :
- *.php
- *Plugin.php
:
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
출처 : http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


ConfigProvider

위치 :
- \Foo\Bar\Model
이름 :
- *ConfigProvider.php
:
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


내 질문은 :

  • 에 대한 good/ bad/ best관행 이 있다면 Magento 2?
  • DataProvider예를 들어 사용자 정의를 만들고 싶다면 무엇입니까?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • 클래스 이름 및 위치의 구성, 모듈 루트의 폴더, 모델, 도우미 등의 구성을 결정하는 방법은 무엇입니까?
  • 검색된 데이터 소스 / 데이터 유형에 따라 달라 집니까?
  • 클래스 이름에 접미사를 언제 추가해야합니까?


에 대한 응답의 일부 Virtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

답변:


10

Magento 2는 Magento 1로 제한되지 않으며 블록, 도우미, 모델 등과 같은 몇 개의 폴더에만 제한됩니다.
기본적으로 원하는 폴더에 클래스를 배치 할 수 있습니다. 클래스는 Magento 1에서와 같이 별칭이 아닌 전체 클래스 이름을 사용하여 인스턴스화되므로 사용자에게 달려 있습니다.

기능별로 그룹화하는 것이 좋습니다.

  • 에서 관찰자 Vendor/Module/Observer.
  • 플러그인 Vendor/Module/Plugin
  • 데이터 제공 업체 Vendor/Module/DataProvider.
  • UI 구성 요소 관련 클래스 Vendor/Module/Ui

이름 중복을 피하십시오. 나는 Vendor/Module/DataProvider/CustomDataProvider여분의 것을 의미 합니다.

아마도 접미사는 인터페이스에 대해서만 추가 될 수 있지만 사람들은 그것을 반대 할 것입니다.

요약하면, 일을하는 방식은 일관되게 유지해야합니다.

기능적 관점에서 클래스를 배치하는 위치는 중요하지 않습니다. 당신은 그들에게 미쳐 가서 모든 Vendor/Module폴더에 직접 배치 할 수 있지만, 아마 원하지 않을 것입니다.

컨트롤러가 폴더 안에 있어야한다는 것이 유일한 제한 사항이라고 생각합니다 Controller.


나는 우리가 미쳐 갈 수 있다는 데 동의합니다. 그것은 나쁜 것만 큼 좋은 점이지만 당신이 말한 것처럼 사물을 보는 방식에 따릅니다. 어쩌면 MagentoLive 프랑스에서 발표 된대로 Magento가 내부 기술 비전을 공유 할
때이

7

나는 의견을 기반으로 생각하지만 M2의 클래스 이름 및 위치와 관련하여 일부 불일치가 있음에 동의합니다.

폴더 이름 지정과 관련하여 내가 작성한 목록은 다음과 같습니다. 나에게 모듈을 쉽게 찾아보고 이해할 수 있도록하려면 항상 해당 폴더를 사용해야합니다.

  • 블록
  • 제어 장치
  • 모델
  • 관찰자
  • 설정
  • 테스트
  • 우이
  • 기타
  • i18n
  • 전망
  • 크론
  • 돕는 사람
  • 콘솔
  • API
  • 플러그인
  • DataProvider

그 외에도 M2는 매우 특정한 폴더를 사용하지만이 목록에는 포함시키지 않았습니다.

  • 가격
  • 고객 데이터
  • 서비스
  • 게이트웨이
  • 파일
  • 어댑터
  • 구성 요소
  • TemplateEngine

M2의 좋은 점은 필요한 폴더를 사용하고 만들 수 있다는 것입니다. 위의 목록에 속하지 않는 항목이 있으면 자신 만의 폴더를 만들고 클래스를 넣으십시오.


모든 답변에서 우리는 동일한 아이디어, 우리가 원하는대로 할 수있는 가능성, 가장 일관되고 규칙적인 구성을 유지하는 것이 중요합니다. 그러나 Magento가 ML에 발표했을 때 이에 대한 내부 비전을 공유하는 것이 좋을 것입니다. 말씀 드린대로 모든 사람이 핵심 및 커뮤니티 확장을 이해하는 것이 더 쉬울 것입니다. 답변 주셔서 감사합니다.
Matthéo Geoffray

6

코드 를 가능한 한 자기 문서화 하는 것이 최우선 과제라고 생각 합니다. 따라서 모든 것을 Model 또는 Helper 디렉토리에 넣는 대신 아래 코드가 수행하는 작업을 설명하는 좋은 이름을 찾는 것이 더 나은 방법입니다. 물론 더 많은 생각이 필요하기 때문에 더 어렵습니다.

예를 들어, Model/Config/Converter.php이름을 사용하는 대신 OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.php모듈과 클래스가하는 일이 훨씬 더 많습니다.


당신이 말했듯이 우리를 위해 명확하게하기 위해서는 더 많은 생각이 필요합니다. 그것은 현재 상황을 어렵게하지만 시간이 지남에 따라 더 효과적입니다. 답변 주셔서 감사합니다
Matthéo Geoffray

3

위의 몇 가지 좋은 답변이 이미 있습니다. 내가 추가하고 싶은 것은 코드를 배치하지 app/code말고 대신 컴포저 기반 설치 방법을 사용 하여 코드를 배치해야한다는 것 vendor/입니다.


예, 그 점을 알고 걱정하지 마십시오. 형식은 제 질문의 예일뿐입니다.) 그러나 당신은 내가 그것을 명확하게하기 위해 편집 할 것을 모르는 사람들에게 옳습니다. 감사합니다
Matthéo Geoffray

좋은 지적 fooman
Amit Bera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.