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
  • วิธีตรวจสอบการสร้างชื่อคลาสและตำแหน่ง, โฟลเดอร์ที่รูทของโมดูล, ใน Model, ใน Helper, etc?
  • มันขึ้นอยู่กับแหล่งข้อมูล / ประเภทข้อมูลที่ดึงมาได้หรือไม่?
  • เราต้องเพิ่มคำต่อท้ายให้กับชื่อคลาสเมื่อใด


ส่วนหนึ่งของการตอบกลับสำหรับVirtual Types: https://community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

คำตอบ:


10

Magento 2 ไม่ได้ถูก จำกัด ให้เป็น Magento 1 เพียงไม่กี่โฟลเดอร์เท่านั้นเช่น block, helper, model และอื่น ๆ
โดยทั่วไปคุณสามารถวางคลาสในโฟลเดอร์ใดก็ได้ที่คุณต้องการ ขึ้นอยู่กับคุณเนื่องจากคลาสนั้นสร้างอินสแตนซ์โดยใช้ชื่อคลาสแบบเต็มไม่ใช่กับชื่อแทนเช่น Magento 1

คำแนะนำของฉันคือการจัดกลุ่มพวกเขาโดยฟังก์ชั่น

  • Vendor/Module/Observerผู้สังเกตการณ์ใน
  • ปลั๊กอิน Vendor/Module/Plugin
  • Vendor/Module/DataProviderผู้ให้บริการข้อมูลใน
  • คลาส UI ที่เกี่ยวข้องกับคอมโพเนนต์ใน Vendor/Module/Ui

แต่พยายามหลีกเลี่ยงการทำซ้ำชื่อ ฉันหมายถึงVendor/Module/DataProvider/CustomDataProviderจะซ้ำซ้อน

อาจเพิ่มคำต่อท้ายสำหรับอินเทอร์เฟซเท่านั้นแม้ว่าผู้คนจะโต้แย้งกับมัน

ในการสรุปมันขึ้นอยู่กับคุณว่าคุณจะทำมันเพียงแค่สอดคล้องกัน

จากมุมมองของฟังก์ชั่นการใช้งานไม่สำคัญที่คุณจะต้องวางคลาส คุณสามารถคลั่งไคล้พวกเขาและวางมันลงในVendor/Moduleโฟลเดอร์ได้โดยตรงแต่คุณอาจไม่ต้องการมัน

ผมคิดว่า ( แต่ไม่แน่ใจว่าสมบูรณ์) ที่ข้อ จำกัด Controllerเพียงอย่างเดียวคือการควบคุมจะต้องอยู่ในโฟลเดอร์


ฉันเห็นด้วยที่เราสามารถไปบ้ามันเป็นจุดที่ดีมากเท่าที่ไม่ดี แต่อย่างที่คุณบอกว่ามันเป็นไปตามวิธีที่เราเห็นสิ่งต่าง ๆ บางทีเมื่อ Magento แชร์วิสัยทัศน์ทางเทคนิคภายในของพวกเขาตามที่ประกาศใน MagentoLive France เราจะมีข้อมูลเพิ่มเติมเกี่ยวกับประเด็นเหล่านี้ขอบคุณสำหรับการแบ่งปันความคิดเห็นของคุณ
Matthéo Geoffray

7

ฉันคิดว่ามันเป็นไปตามความเห็น แต่ฉันยอมรับว่ามีความไม่สอดคล้องกันบางประการเกี่ยวกับการตั้งชื่อชั้นเรียนและสถานที่ตั้งใน M2

นี่คือรายการที่ฉันคิดเกี่ยวกับการตั้งชื่อโฟลเดอร์ สำหรับฉันคุณควรใช้โฟลเดอร์เหล่านั้นทุกครั้งที่ทำได้เพื่อให้โมดูลของคุณง่ายขึ้นในการเรียกดูและทำความเข้าใจกับผู้อื่น:

  • บล็อก
  • ตัวควบคุม
  • แบบ
  • ผู้สังเกตการณ์
  • ติดตั้ง
  • ทดสอบ
  • อุ้ย
  • ฯลฯ
  • i18n
  • ดู
  • cron
  • ผู้ช่วย
  • ปลอบใจ
  • Api
  • เสียบเข้าไป
  • dataprovider

นอกเหนือจากนั้น M2 ใช้โฟลเดอร์เฉพาะบางอย่าง แต่ฉันไม่ได้รวมไว้ในรายการนี้:

  • การตั้งราคา
  • App
  • ข้อมูลลูกค้า
  • บริการ
  • ประตู
  • ไฟล์
  • อะแดปเตอร์
  • ตัวแทน
  • TemplateEngine

สิ่งที่ดีกับ M2 ก็คือคุณสามารถใช้และสร้างโฟลเดอร์อะไรก็ได้ที่คุณต้องการ หากสิ่งที่ไม่ได้อยู่ในรายการข้างต้นสร้างโฟลเดอร์ของคุณและใส่ชั้นเรียนของคุณในพวกเขาเพียงแค่พยายามที่จะสอดคล้อง


ในคำตอบทั้งหมดของคุณเราพบความคิดเดียวกันความเป็นไปได้ที่จะทำตามที่เราต้องการสิ่งสำคัญที่สุดคือการคงความสม่ำเสมอและสม่ำเสมอในการสร้าง อย่างไรก็ตามมันจะเป็นการดีสำหรับ Magento ที่จะแบ่งปันวิสัยทัศน์ภายในเกี่ยวกับเรื่องนี้เมื่อพวกเขาประกาศให้ ML ดังที่คุณกล่าวว่ามันจะง่ายขึ้นสำหรับทุกคนที่จะเข้าใจส่วนขยายหลักและชุมชน ขอบคุณสำหรับคำตอบ.
Matthéo Geoffray

6

ฉันคิดว่าสิ่งสำคัญที่สุดควรจะทำให้รหัสเป็นเอกสารด้วยตนเองเท่าที่จะทำได้ ดังนั้นแทนที่จะใส่ทุกอย่างลงในไดเรกทอรี Model หรือ Helper การค้นหาชื่อที่ดีที่อธิบายว่าโค้ดด้านล่างทำอะไรได้บ้างเป็นวิธีที่ดีกว่า แน่นอนว่ามันยากกว่าเพราะต้องใช้ความคิดมาก

ตัวอย่างเช่นแทนที่จะใช้Model/Config/Converter.phpชื่อOrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.phpบอกสิ่งที่โมดูลและคลาสทำได้มากกว่า


ดังที่คุณกล่าวว่าต้องใช้ความคิดมากขึ้นในการทำให้ชัดเจนสำหรับเรา แต่สำหรับทุกคนที่เห็นส่วนขยาย ทำให้สิ่งต่าง ๆ ยากขึ้นในขณะนี้ แต่มีประสิทธิภาพมากขึ้นเมื่อเวลาผ่านไป ขอบคุณสำหรับคำตอบของคุณ
Matthéo Geoffray

3

มีบางคำตอบที่ดีจริงๆข้างต้นแล้ว สิ่งที่ฉันต้องการที่จะเพิ่มคือการที่คุณควรหลีกเลี่ยงการวางรหัสใต้และแทนที่จะใช้วิธีการติดตั้งตามนักแต่งเพลงซึ่งจะจบลงด้วยการวางโค้ดของคุณภายใต้app/codevendor/


ใช่ไม่ต้องกังวลฉันรู้ว่ารูปแบบนั้นมีไว้เพื่อเป็นตัวอย่างในคำถามของฉัน :) แต่คุณเหมาะสำหรับคนที่ไม่รู้ว่าฉันจะแก้ไขเพื่อให้ชัดเจน ขอบคุณ
Matthéo Geoffray

นั่นคือประเด็นที่ดีสำหรับเพื่อน
Amit Bera
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.