Tôi hiểu rằng các lệnh không nên trả lại bất cứ điều gì.
Đó là một góc nhìn, nhưng nó không hoàn toàn được đặt trong đá. Xem xét việc ghi (PUT, POST, DELETE) trong HTTP - tất cả các thông báo này là các lệnh, theo nghĩa là chúng là các thông báo yêu cầu trạng thái thay đổi tài nguyên và tất cả chúng đều trả về phản hồi.
Vậy làm thế nào để bạn xử lý một lỗi ngoài Command Bus? (Ví dụ: người dùng đã đăng ký 1 giây trước đó với cùng tên người dùng / email).
Làm thế nào để bạn biết lệnh đó thất bại, và làm thế nào để bạn biết lỗi?
Vì vậy, trong trường hợp bạn đang liên lạc trực tiếp với trình xử lý lệnh, một tin nhắn được trả về là một cách hoàn toàn hợp lý để xác nhận rằng lệnh đã được nhận và xử lý.
Nếu bạn đang sử dụng một phần mềm trung gian, như xe buýt, ngăn bạn liên lạc trực tiếp với mục tiêu, thì tôi khuyên bạn nên tìm đến các mẫu nhắn tin không đồng bộ - làm thế nào để bạn xử lý lệnh để gửi tin nhắn trở lại người gọi?
Một ý tưởng là đăng ký kết quả của lệnh; điều này mượn từ một số ý tưởng trong Mô hình tích hợp doanh nghiệp của Hohpe. Ý tưởng cơ bản là, vì máy khách đã quen thuộc với thông báo lệnh đã được gửi, nên nó có vị trí tốt để đăng ký bất kỳ tin nhắn mới nào được xuất bản do hậu quả của thông báo lệnh. Trình xử lý lệnh, sau khi lưu dữ liệu vào sổ ghi chép, xuất bản các sự kiện thông báo rằng thay đổi đã thành công và khách hàng đăng ký các sự kiện đó - nhận ra các sự kiện chính xác bằng cách xem xét sự trùng hợp của các số nhận dạng khác nhau trong thông báo (id nguyên nhân, id tương quan , vân vân).
Phương pháp thay thế là một chút trực tiếp hơn. Một là sẽ bao gồm trong tin nhắn một cuộc gọi lại, có thể được gọi bởi trình xử lý lệnh sau khi tin nhắn được xử lý thành công.
Một cách khác rất giống là dự trữ không gian trong thông báo lệnh để trình xử lý lệnh viết xác nhận - vì máy khách đã có thông báo lệnh trong câu hỏi, mạch đã hoàn tất. Hãy suy nghĩ " lời hứa " hoặc " tương lai hoàn thành". Thông báo cho người xử lý lệnh nơi viết xác nhận; làm như vậy báo hiệu cho khách hàng (chốt đếm ngược) rằng xác nhận có sẵn.
Và tất nhiên, bạn có tùy chọn bổ sung để loại bỏ phần mềm trung gian dường như đang cản trở việc thực hiện đúng cách một cách đơn giản.
Ví dụ: người dùng đã đăng ký 1 giây trước đó với cùng tên người dùng / email
Nếu bạn đang xử lý đăng ký người dùng một cách bình thường, đó không nhất thiết là lỗi - lặp lại tin nhắn cho đến khi nhận được phản hồi là cách phổ biến để đảm bảo ít nhất một lần giao hàng.