Sự khác biệt giữa một lệnh và một sự kiện trong giao tiếp xe buýt có vẻ hơi mơ hồ đối với tôi. Tôi biết rằng các lệnh chỉ nên được thực hiện một lần, trong khi một sự kiện có thể được xử lý nhiều lần, nhưng tôi vẫn không chắc chắn khi nào nên sử dụng lệnh hoặc sự kiện.
Hãy xem xét một ví dụ:
Khi người dùng mới đăng ký vào một ứng dụng web, chúng ta nên tạo cho anh ta một tài khoản và gửi email xác nhận.
Tạo tài khoản - đây dường như là điểm thích hợp để gửi CreateUserCommand
xe buýt và để một thành phần chuyên biệt xử lý nó.
Hoặc có lẽ điều này thậm chí không nên được thực hiện với giao tiếp xe buýt không đồng bộ? Chúng tôi muốn người dùng có thể đăng nhập vào ứng dụng ngay lập tức. Với xe buýt, chúng tôi không đảm bảo khi nào lệnh sẽ được thực thi.
Gửi email - sau khi thành phần tạo tài khoản tôi có thể thấy 2 khả năng
- Gửi lệnh khác đến xe buýt
SendConfirmationEmailCommand
- Xuất bản một sự kiện
UserAccountCreatedEvent
Và hơn là để thành phần người gửi email lấy nó và công việc của nó.
Một mặt tôi muốn email xác nhận chỉ được gửi một lần (sử dụng lệnh), mặt khác, tôi tin rằng có thể có nhiều thành phần quan tâm đến người dùng mới đăng ký. Một logger hoặc có thể là một người gửi SMS.
Làm thế nào bạn sẽ thực hiện nó?