ดังนั้นวีโอไอพีจึงเสนอวิธีการประกาศผู้สังเกตการณ์ 2 วิธี Singleton and Model (ตัวอย่างใหม่) โดยการระบุ<type>แท็กใน Magento 1.x และโดยการระบุsharedแอตทริบิวต์ใน Magento 2
Magento วิธีที่ 1 ในการทำมัน
<events>
<event_name>
<observers>
<unique_observer_name>
<type>model|object|singleton|null</type>
<class>class/alias_here</class>
<method>methdNameHere</method>
</unique_observer_name>
</observers>
</event_name>
</events>
Magento 2 เวอร์ชั่น:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
ดังนั้นในกรณีของวีโอไอพี 1, ถ้า<type>แท็กเป็นรูปแบบหรือวัตถุชั้นจะ instantiated Mage::getModel()กับ ถ้ามันหรือมันหายไปมันถูกสร้างโดยใช้singletonMage::getSingleton()
ในกรณีของ Magento 2 ถ้าsharedเป็นเช่นfalseนั้นคลาสจะถูกสร้างโดยใช้$this->_observerFactory->create() (ตัวอย่างใหม่)
ถ้าsharedเป็นจริงมันจะใช้อินสแตนซ์$this->_observerFactory->get()(ซิงเกิลตัน)
ระหว่างสองรุ่นความคิดเหตุการณ์สังเกตการณ์จะคล้ายกันมาก แต่ส่วนใหญ่ของผู้สังเกตการณ์ในวีโอไอพี 1 จะถูกใช้เป็น singletons เพราะtypeแท็กจะหายไปและในที่สุดวีโอไอพี 2 (ฉันคิดว่าทั้งหมด) shared="false"ของผู้สังเกตการณ์ได้
ฉันงง เมื่อใดที่ฉันควรใช้ซิงเกิลตันและฉันควรใช้อินสแตนซ์ใหม่สำหรับผู้สังเกตการณ์เมื่อใด
เวอร์ชั่นวีโอไอพี (1 หรือ 2) ไม่สำคัญที่นี่
กรณีการใช้งานที่เรียบง่ายจะทำสำหรับแต่ละวิธี (ตัวอย่างใหม่หรือซิงเกิลตัน)
type <type>singleton</type>แล้วอะไรคือเหตุผลที่ทำให้เราเป็นผู้สังเกตการณ์เดี่ยว
typeคุณลักษณะเลย แต่ฉันก็มักจะข้ามมันไป