Ngoài ra, ngoài tất cả các câu trả lời ở đây được hiển thị, một trình xử lý sự kiện cũng có thể kích hoạt một lệnh sau khi nhận được thông báo rằng một sự kiện đã xảy ra.
Ví dụ: giả sử sau khi bạn tạo Khách hàng, bạn cũng muốn khởi tạo một số giá trị tài khoản, v.v. Sau khi Khách hàng AR của bạn thêm sự kiện vào EventDispatcher và điều này được đối tượng CustomerCreateEventHandler nhận được, trình xử lý này có thể kích hoạt gửi một lệnh. sẽ thực thi bất cứ điều gì bạn cần, v.v.
Ngoài ra, còn có DomainEvents và ApplicationEvents. Sự khác biệt chỉ đơn giản là khái niệm. Bạn muốn gửi tất cả các sự kiện miền của mình trước (một số trong số chúng có thể tạo ra Sự kiện ứng dụng). Ý tôi là gì?
Việc khởi tạo tài khoản sau khi CustomerCreateEvent đã xảy ra là một sự kiện DOMAIN. Gửi thông báo qua email cho Khách hàng là một Sự kiện Ứng dụng.
Lý do bạn không nên trộn chúng đã rõ ràng. Nếu máy chủ SMTP của bạn tạm thời ngừng hoạt động, điều đó không có nghĩa là HOẠT ĐỘNG TRONG MIỀN của bạn sẽ bị ảnh hưởng bởi điều đó. Bạn vẫn muốn giữ trạng thái không bị hỏng của các tập hợp của mình.
Tôi thường thêm các sự kiện vào Điều phối viên của mình ở cấp Gốc tổng hợp. Sự kiện này là DomainEvents hoặc ApplicationEvents. Có thể là cả hai và có thể là nhiều người trong số họ. Sau khi trình xử lý lệnh của tôi hoàn tất và tôi quay lại ngăn xếp để mã thực thi trình xử lý lệnh, sau đó tôi kiểm tra Điều phối viên của mình và gửi bất kỳ DomainEvent nào khác. Nếu tất cả những điều này thành công, sau đó tôi đóng giao dịch.
Nếu tôi có bất kỳ Sự kiện Ứng dụng nào, đây là lúc để gửi chúng. Gửi email không nhất thiết cần kết nối mở với cơ sở dữ liệu cũng như mở phạm vi giao dịch.
Tôi đã đi lạc một chút so với câu hỏi ban đầu nhưng điều quan trọng là bạn phải hiểu cách các sự kiện cũng có thể được đối xử khác nhau về mặt khái niệm.
Sau đó, bạn có Sagas .... nhưng đó là CÁCH CÓ THỂ của phạm vi câu hỏi này :)
Nó có ý nghĩa không?