Bạn sẽ không tìm thấy một câu trả lời hay, rõ ràng, mang tính quyết định ở đây. Nhìn chung, bạn nên gửi các sự kiện trong mô-đun của mình, nơi bạn và người dùng của bạn cần chúng - nếu bạn không thể nghĩ đến bất cứ nơi nào chúng có thể cần, bạn không cần phải gửi chúng. Chính Magento phát ra rất nhiều sự kiện ở rất nhiều nơi khác nhau (bộ điều khiển trước / bài gửi, bất kỳ hoạt động thô lỗ nào, v.v.) mà mô-đun của bạn sẽ gửi một số sự kiện hữu ích mà bạn không phải làm gì.
Vì điều đó không thỏa mãn, bạn muốn mô-đun của mình gửi một sự kiện khi có một số hành động mà mô-đun của bạn thực hiện mà người dùng của bạn có thể muốn thêm các mục vào, xóa các mục khỏi, thay đổi hoặc thực hiện một hành động riêng biệt độc lập với hành động ban đầu. Ví dụ: Magento có một visitor_init
sự kiện không phải là một phần của bộ sự kiện được tạo tự động tiêu chuẩn. Sự kiện này cho phép các lập trình viên sửa đổi objet của khách truy cập trước khi Magento ghi dữ liệu. Đây không phải là cách mà các nhà phát triển mô-đun ban đầu biết một cách xác địnhđây là nơi cần thêm một sự kiện - nó có thể đến từ các yêu cầu tính năng và / hoặc các cuộc phỏng vấn với người dùng hệ thống. Biết người dùng của bạn muốn gì và nếu không thể / thực tế xây dựng UI / UX để cho phép họ làm điều đó thông qua quản trị viên, hãy thêm một móc sự kiện để một lập trình viên khác có thể làm điều đó cho họ.
Ít gợi cảm hơn, thêm các sự kiện cũng có thể là một cách rẻ tiền để cho phép các nhà phát triển (hoặc người dùng của bạn hoặc thậm chí nhóm của bạn ) thêm một số chức năng vào một đoạn mã hấp dẫn mà mọi người đều sợ chạm vào. Đặt dispatchEvent
cuộc gọi của bạn vào giữa mã, nối vào nó và bạn có thể thêm chức năng của mình mà không làm phiền mã trong phạm vi ban đầu. [Trình chỉnh sửa: Ngoài ra, bạn nên cấu trúc lại mã khủng khiếp đó vào một lúc nào đó]
Hiệu suất khôn ngoan, thêm một sự kiện để gửi sẽ phụ thuộc vào nơi bạn thêm nó. Khi bạn gọi dispatch
sự kiện, Magento cần thực hiện thêm một số cuộc gọi PHP, truy vấn cấu hình cho bất kỳ trình quan sát được cấu hình nào, sau đó gọi cho người quan sát. Thực hiện một lần, đây là một bổ sung giá rẻ trong phạm vi của một công văn Magento tiêu chuẩn. Tuy nhiên, được thực hiện nhiều lần, (giả sử, trước mỗi khối kết xuất), điều này có thể cộng lại. Không có quy tắc tốt nào ở đây - vì luôn có câu trả lời đúng là hồ sơ.
Cuối cùng, với Magento 2, vẫn còn quá sớm để nói. Tất cả những điều trên vẫn được áp dụng - tuy nhiên hệ thống plugin thêm một vài nếp nhăn. Các plugin, theo một quan điểm, là một cách để tạo sự kiện như hành vi cho bất kỳ cuộc gọi phương thức công khai nào trong Magento. Về lý thuyết, nếu bạn thiết kế các lớp học của mình một cách chính xác, bạn sẽ không bao giờ cần một sự kiện. Tuy nhiên, trong thực tế, việc thả một sự kiện vào một chút mã phương thức được bảo vệ hoặc riêng tư sẽ là một giải pháp hấp dẫn cho các nhà phát triển Magento khi phương án thay thế là một quá trình tái cấu trúc dài. Ngoài ra, việc tạo một sự kiện được đặt tên cụ thể thường có thể tạo ra trải nghiệm thân thiện hơn cho các nhà phát triển sử dụng mô-đun của bạn.
Mong rằng sẽ giúp!