سؤال

لذا تقدم Magento طريقتين لإعلان المراقب.Singleton وModel (مثيل جديد) عن طريق تحديد <type> العلامة في Magento 1.x ومن خلال تحديد shared الخاصية في ماجنتو 2

طريقة ماجنتو 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>

نسخة ماجنتو 2 :

<event name="event_name">
    <observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>

لذلك في حالة Magento 1، إذا كان <type> العلامة هي نموذج أو كائن، وسيتم إنشاء مثيل للفئة بها Mage::getModel().إذا كان singleton أو أنه مفقود ويتم إنشاء مثيل له باستخدام Mage::getSingleton().

في حالة ماجنتو 2، إذا shared يكون false ثم يتم إنشاء مثيل للفئة باستخدام $this->_observerFactory->create() (مثال جديد).
لو shared صحيح أنه تم إنشاء مثيل له باستخدام $this->_observerFactory->get() (مفردة).

بين النسختين، فكرة مراقب الحدث متشابهة جدًا، لكن معظم المراقبين في Magento 1 يتم استخدامهم كمراقبين فرديين، لأن type العلامة مفقودة وفي Magento 2 معظم المراقبين (على ما أعتقد جميعهم) لديهم shared="false".

أنا في حيرة. متى يجب علي استخدام المفردات ومتى يجب علي استخدام مثيلات جديدة للمراقبين؟
إصدار الماجنتو (1 أو 2) ليس مهمًا هنا.
حالة الاستخدام البسيطة ستكون مناسبة لكل نهج (مثيل جديد أو فردي)

هل كانت مفيدة؟

المحلول

هناك حالة استخدام واحدة فقط، حيث يكون المفرد للمراقبين منطقيًا.وذلك عندما تراقب حدثين يعتمدان على بعضهما البعض وتريد الحصول على شيء ما خلال الحدث الأول، لكن تقوم بمعالجته خلال الحدث الثاني.يمكنك أيضًا استخدام التسجيل هنا، ولكن هذا سيكون شيئًا أكثر عمومية، لذا فإن المفرد ومتغير الفئة المحمية يعد حلاً جيدًا.

في الواقع، هذا لا يحدث أبدًا تقريبًا، ولكن يستخدم الماجنتو 1 و2 افتراضيًا Shared=true

السبب المحتمل وراء كون المفرد هو الافتراضي في الماجنتو:التحسين الجزئي!اعتقد شخص ما أنه سيوفر الكثير من الوقت لعدم الحاجة إلى إنشاء الكائنات مرارًا وتكرارًا.قد يكون ذلك صحيحًا بالنسبة لبعض الأحداث التي يتم استدعاؤها بضع مئات من المرات أثناء الطلب، وقد يكون من المعقول أيضًا القيام بذلك كإعداد افتراضي في حالات الاستخدام السيئ للأحداث.

نصائح أخرى

يستخدم Magento بشكل افتراضي المفردة بحيث يحفظ الموارد داخل الصندوق.نموذجان لاحتياجات التشغيل المتزامنة للعملية حيث يحتاجان إلى تخزين البيانات والاحتفاظ بها بشكل فردي.في المفردة يصبح الكائن متقلبًا بمجرد تحميل بيانات جديدة.

يستخدم Magento 2.0 بشكل مباشر الكائنات المشتركة للاستفادة منها.يحتوي Magento 2.0 على أدوات تدمير مكتوبة بشكل جيد للغاية والتي تحافظ على تنظيف الذاكرة بمجرد إنجاز المهمة!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top