คลาสใดที่สร้างขึ้นใน Magento 2


9

ใน Magento 2 มีชุดของคลาสที่สร้างขึ้นโดยอัตโนมัติและเก็บไว้ในvar/generationและพวกเขาจะใช้ในรหัสหลัก
ในขณะที่พยายามสร้างโมดูลที่กำหนดเองโดยการจำลองหนึ่งในโมดูลหลักที่ฉันเห็นว่าสำหรับโมดูลของฉันยังมีบางคลาสที่สร้างขึ้น
ในชั้นเรียนที่สร้างขึ้นฉันได้เห็นพร็อกซี่, ดัก, โรงงาน ....

มีรายการคลาสทั้งหมดหรือประเภทของคลาสที่สร้างขึ้นโดยอัตโนมัติหรือไม่?
และเป็นคำถามด้าน ... พวกเขาสร้างขึ้นเมื่อใด / ที่ไหน?

คำตอบ:


9

มีเหตุผลที่แตกต่างกันในการสร้างเอนทิตีที่แตกต่างกัน:

พร็อกซี - มันใช้สำหรับการโหลดขี้เกียจ แต่แต่ละประเภทต้องการคลาสพร็อกซีแยกต่างหากซึ่งน่ารำคาญสำหรับนักพัฒนาที่จะเขียนด้วยตนเองดังนั้นวีโอไอพีจึงสร้างขึ้นมา Yo จะค้นหาการอ้างอิงถึง Proxies ใน di.xml เท่านั้น

Factory - เป็นคลาสที่ใช้สร้าง non-injectables (เอนทิตี) เหมือนกับผู้รับมอบฉันทะ PHP ยังไม่มีข้อมูลทั่วไปดังนั้นเราจึงสร้างโรงงานโดยอัตโนมัติเพื่อไม่ให้นักพัฒนาเขียนโค้ดสำเร็จรูป คุณจะโต้ตอบกับโรงงานข้ามรหัสวีโอไอพี ส่วนใหญ่คุณจะต้องใช้โรงงานของคุณเองสำหรับหน่วยงานของคุณ เพียงแค่ขอให้โรงงานที่สอดคล้องกันในตัวสร้างและมันจะได้รับการสร้างในการเรียกใช้ต่อไปหรือในระหว่างการเรียกใช้คอมไพเลอร์

Interceptor - เป็นคลาสโครงสร้างพื้นฐานที่ใช้โดยองค์ประกอบการสกัดกั้น อย่างที่ Flyingmana และ Phil Winkle สังเกตว่าคุณไม่ควรมีปฏิสัมพันธ์กับพวกเขา แต่อย่างใด

มีเอนทิตีอื่น ๆ ที่สร้างขึ้น (เช่น Logger สำหรับโหมดการทำโปรไฟล์กราฟวัตถุ) แต่สิ่งเหล่านี้สำคัญที่สุด

Magento 2 ยังสามารถรวบรวมได้ การรวบรวมทำให้ DI และการสกัดกั้นเร็วขึ้น การสร้างรหัสและการรวบรวมทั้งหมดสามารถทำได้ด้วย dev / tools / Magento / Tools / Di / compiler.php


2

จากแนวคิด:

คุณไม่จำเป็นต้องรู้ว่าชั้นเรียนประเภทใดที่สร้างขึ้นโดยอัตโนมัติเนื่องจากคุณไม่จำเป็นต้องแตะหรือใช้มันแม้แต่คุณควรจะทำ

พวกเขาได้รับ (ยัง?) ที่สร้างขึ้นในทันที แต่ควรได้รับการสร้างในภายหลังผ่านคำสั่ง cli หรือคล้ายกัน

รายการชนิดที่มีอยู่สามารถเติบโตได้ตลอดเวลาเมื่อชิ้นส่วนภายในได้รับความต้องการชิ้นส่วนใหม่ แต่การเข้าถึงพวกมันมักจะซ่อนอยู่หลัง API เอกสารปกติ (ปกติเรียกว่าการเรียกใช้ฟังก์ชัน)


1
ฉันไม่แน่ใจเกี่ยวกับ "หรือใช้พวกเขา" นี่คือตัวอย่าง: ในMagento\Cms\Block\Blockในตัวสร้างตัวอย่างของการ\Magento\Cms\Model\BlockFactoryถูกนำมาใช้ คลาสนั้นไม่มีอยู่ในรหัส var/generationมันเป็นเรื่องที่พบได้เฉพาะใน ดังนั้นถ้าฉันทำโมดูลที่คล้ายกันฉันอาจต้องใช้คลาสที่คล้ายกัน
Marius

2

นี่คือวิธีที่วีโอไอพีสร้างแนวทางที่มุ่งเน้นไปที่แพลตฟอร์มใหม่ โดยการสร้างก่อน, รอบ, และหลัง "เหตุการณ์" แทนการส่งพวกมันแบบไดนามิก นี่คือความสมดุลของความสะดวกสบายให้โปรแกรมเมอร์และประสิทธิภาพสำหรับแพลตฟอร์ม

เทคนิคบางอย่างเช่นการฉีดพึ่งพาอัตโนมัติจะถูกทำให้ราบเรียบในคลาสที่สร้างขึ้นแทนที่จะดำเนินการผ่านการสะท้อนกลับ - อีกครั้ง - นี่คือเทคนิคในการปรับปรุงประสิทธิภาพ


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