Burada iyi, açık, kararlı bir cevap bulamayacaksınız. Genel olarak, modülünüzde sizin ve kullanıcılarınızın ihtiyaç duyduğu olayları göndermelisiniz - ihtiyaç duydukları herhangi bir yeri düşünemiyorsanız, onları göndermenize gerek yoktur. Magento'nun kendisi o kadar çok farklı yerde o kadar çok olay yayar (denetleyici öncesi / sonrası sevkiyatı, herhangi bir kabartma işlemi, vb.), Modülünüz hiçbir şey yapmadan çok sayıda yararlı olay gönderir.
Bu tatmin edici olmadığından, modülünüzün, kullanıcılarınızın orijinal işlemden bağımsız olarak öğe eklemek, öğeden silmek, öğeden silmek, değiştirmek veya ayrı bir işlem yapmak isteyebileceği bir işlem olduğunda modülünüzün bir etkinlik göndermesini istersiniz. Örneğin - Magento,visitor_init
standart otomatik oluşturulan etkinlikler paketinin bir parçası olmayan bir etkinliğe sahiptir . Bu olay, programcıların Magento verileri kaydetmeden önce ziyaretçi nesnesini değiştirmesine izin verir. Bunlar, orijinal modül geliştiricilerinin deterministik olarak bilmelerinin hiçbir yolu değildiBurası bir etkinliğin eklenmesi gereken yerdi - büyük olasılıkla özellik kullanıcılarından ve / veya sistem kullanıcılarıyla yapılan görüşmelerden geldi. Kullanıcılarınızın ne istediğini bilin ve yönetici aracılığıyla yapmasına izin vermek için bir UI / UX oluşturmak mümkün / pratik değilse, başka bir programcının onlar için yapabileceği bir olay kancası ekleyin.
Az sexily ekleyerek etkinlikler de (kullanıcıların, hatta iki geliştiriciler etkinleştirmek için ucuz bir yol olabilir senin herkesin korkuyor dokunmak o kod gnarly biraz içine biraz işlevsellik eklemek için ekip). Senin Plop dispatchEvent
içine kod, kanca orta aramayı ve orijinal kapsamda kodu bozmadan işlevler ekleyebilirsiniz. [Editör: Ayrıca bu korkunç kodu bir noktada refactor gerekir]
Performans açısından akıllıca bir olay eklemek, olayı nereye eklediğinize bağlı olacaktır. dispatch
Olayı çağırdığınızda , Magento'nun birkaç ekstra PHP çağrısı yapması, yapılandırılmış gözlemciler için yapılandırmayı sorgulaması ve ardından gözlemcileri çağırması gerekir. Bir kez yapıldığında, bu standart bir Magento sevkiyatı kapsamında ucuz bir ektir. Bununla birlikte, tekrar tekrar yapılırsa (örneğin, her blok oluşturulmadan önce) bu toplanabilir. Burada iyi bir kural yok - her zaman doğru cevap profildir.
Son olarak, Magento 2 ile, söylemek için henüz çok erken. Yukarıdakilerin hepsi hala geçerlidir - ancak eklenti sistemi birkaç kırışıklık ekler. Eklentiler, bir bakış açısıyla, Magento'daki herhangi bir genel yöntem çağrısı için olay benzeri davranış oluşturmanın bir yoludur . Teorik olarak, sınıflarınızı doğru bir şekilde tasarlıyorsanız, asla bir etkinliğe ihtiyacınız olmamalıdır. Bununla birlikte, uygulamada, bir etkinliği biraz korumalı veya özel yöntem koduna bırakmak, alternatif uzun bir yeniden düzenleme işlemi olduğunda Magento geliştiricileri için cazip bir çözüm olacaktır. Ayrıca, özel olarak adlandırılmış bir etkinlik oluşturmak genellikle modülünüzü kullanan geliştiriciler için daha dostça bir deneyim oluşturabilir.
Umarım yardımcı olur!