ดังนั้นวีโอไอพีจึงเสนอวิธีการประกาศผู้สังเกตการณ์ 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()
กับ ถ้ามันหรือมันหายไปมันถูกสร้างโดยใช้singleton
Mage::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
คุณลักษณะเลย แต่ฉันก็มักจะข้ามมันไป