Câu trả lời:
Tôi không nghĩ rằng việc đánh chặn là nhằm thay thế các nhà quan sát sự kiện.
Vẫn có những sự kiện được gửi trong mã Magento2.
Các bộ chặn chỉ là một cách để xử lý đầu vào hoặc đầu ra của một phương thức.
Hoặc hành vi của một phương thức (sử dụng thiết around
bị chặn) nhưng từ những gì tôi hiểu thì đây là một cách tiếp cận rủi ro.
Tôi nghĩ rằng đó là một cách để tránh lớp viết lại càng nhiều càng tốt.
Trong Magento 1.x, nếu bạn cần sửa đổi kết quả của một phương thức bạn cần để ghi đè lớp chứa và chính phương thức đó.
bây giờ bạn có thể dễ dàng sử dụng before
, after
hoặc around
chặn để thao tác dữ liệu.
Với người quan sát, bạn có thể thao tác dữ liệu theo một số điểm cố định của một phương thức, chứ không phải chính phương thức đầy đủ.
Theo tôi, sử dụng người quan sát khi có thể vẫn là cách tiếp cận tốt nhất để tùy chỉnh ngay cả trong Magento 2.
Đánh chặn là sự tiến hóa của các sự kiện. Mục tiêu của nó là cho phép một nhà phát triển viết mã của mình mà không cần suy nghĩ về các điểm mở rộng.
Với các sự kiện bạn phải suy nghĩ về những nơi bạn thực hiện Mage :: ClarkEvent () để mô-đun của bạn có thể được tùy chỉnh.
Đánh chặn cho phép bạn không nghĩ về điều này. Bạn chỉ cần viết logic kinh doanh của bạn. Mỗi cuộc gọi phương thức là một sự kiện. Vì vậy, nếu bạn viết mã theo cách hướng đối tượng phù hợp, nó sẽ hoàn toàn có thể tùy chỉnh theo thiết kế.
Nhưng các sự kiện cung cấp Giao diện Cung cấp Dịch vụ cấp cao hơn nói về ngôn ngữ kinh doanh. Vì vậy, các sự kiện sẽ ở lại trong Magento 2.
Hiện tại vẫn còn tùy chọn để nghe các sự kiện cụ thể và tôi sẽ đề nghị rằng các thiết bị chặn chỉ là một sự thay thế cho việc viết lại. Tôi vẫn sẽ sử dụng các sự kiện khi có một sự kiện phù hợp với nhu cầu của bạn.
Nếu bạn nhìn vào bản phát hành hiện tại, một số mô-đun có events.xml
các tệp bao gồm các định nghĩa.
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>