Tôi nhận ra câu hỏi trên có thể làm tăng một vài "cái gì đó", nhưng hãy để tôi cố gắng giải thích:
Tôi đang cố gắng tập trung vào một vài khái niệm liên quan, về cơ bản là mô hình Saga ( http://www.rgoarchitects.com/Files/SOAPotypes/Saga.pdf ) kết hợp với tìm nguồn cung cấp sự kiện (Khái niệm DDD : http://en.wikipedia.org/wiki/Domain-driven_design )
Một bài đăng hay kết hợp nó với nhau: https://blog.jonathanoliver.com/cqrs-sagas-with-event-source-part-ii-of-ii/
Tôi sẽ nhận được câu hỏi trong một phút, nhưng tôi nghĩ rằng tôi phải cố gắng tóm tắt những gì tôi hiểu về nó trước tiên (điều này có thể sai, vì vậy hãy sửa nếu đó là trường hợp) vì điều này có thể ảnh hưởng đến lý do tại sao tôi Đặt câu hỏi để bắt đầu với:
- Mẫu Saga là một loại nhà môi giới đưa ra một hành động (người dùng cuối, tự động, v.v. về cơ bản là bất cứ thứ gì sẽ thay đổi dữ liệu) sẽ phân chia hành động đó trong các hoạt động kinh doanh và gửi từng hoạt động này dưới dạng tin nhắn đến Message Bus. lần lượt gửi nó đến các gốc tổng hợp tương ứng để được chăm sóc.
- Những gốc tổng hợp này có thể hoạt động hoàn toàn tự động (phân tách mối quan tâm tốt đẹp, khả năng mở rộng lớn, v.v.)
- Bản thân một cá thể Saga không chứa bất kỳ logic kinh doanh nào, được chứa trong các gốc tổng hợp mà nó gửi các hoạt động tới. 'Logic' duy nhất có trong Saga là 'process'-logic, (thường được triển khai dưới dạng StHRachine), xác định dựa trên các hành động nhận được (cũng như các sự kiện tiếp theo) phải làm gì (ví dụ: hoạt động nào sẽ gửi)
- Các mô hình Saga thực hiện một loại mô hình giao dịch phân tán. Tức là: khi một trong những gốc tổng hợp (một lần nữa hoạt động tự chủ, mà không biết về sự tồn tại của mỗi bà mẹ), toàn bộ hành động có thể phải được khôi phục.
- Điều này được thực hiện bằng cách có tất cả các gốc tổng hợp, sau khi hoàn thành báo cáo hoạt động của họ trở lại Saga. (Trong trường hợp thành công cũng như lỗi)
- Trong trường hợp tất cả các gốc tổng hợp trả lại thành công, stHRachine nội bộ nếu Saga xác định việc cần làm tiếp theo (hoặc quyết định nó đã hoàn thành)
- Trong trường hợp thất bại, Saga phát hành cho tất cả các gốc tổng hợp tham gia vào hành động cuối cùng, cái gọi là Hành động đền bù, nghĩa là: một hành động hoàn tác hành động cuối cùng mà mỗi gốc tổng hợp đã làm.
- Điều này có thể chỉ đơn giản là thực hiện 'Trừ 1 phiếu' nếu hành động đó là "cộng 1 phiếu" nhưng nó có thể phức tạp hơn như khôi phục một blogpost về phiên bản trước đó.
- Tìm nguồn cung cấp sự kiện (xem blogpost kết hợp cả hai) nhằm mục đích lưu lại kết quả của từng hoạt động mà mỗi gốc tổng hợp thực hiện cho Cửa hàng sự kiện tập trung (các thay đổi được gọi là 'sự kiện' trong ngữ cảnh này)
- Cửa hàng Sự kiện này là 'phiên bản duy nhất của sự thật' và có thể được sử dụng để phát lại trạng thái của tất cả các thực thể chỉ bằng cách lặp lại các sự kiện được lưu trữ (về cơ bản giống như nhật ký sự kiện)
- Kết hợp cả hai (nghĩa là: cho phép các gốc tổng hợp sử dụng Nguồn sự kiện để thuê ngoài lưu các thay đổi của chúng trước khi báo cáo lại cho Saga) cho phép nhiều khả năng hay, một trong những vấn đề liên quan đến câu hỏi của tôi ...
Tôi cảm thấy mình cần phải rời khỏi vai mình, vì điều đó rất nhiều để nắm bắt trong một lần. Với bối cảnh / suy nghĩ này (một lần nữa, xin vui lòng sửa nếu sai)
câu hỏi: Khi một gốc tổng hợp nhận được một Hành động bù và nếu gốc tổng hợp đó đã thuê ngoài các thay đổi trạng thái của nó bằng cách sử dụng Nguồn sự kiện, thì tất cả các tình huống sẽ chỉ là xóa sự kiện cuối cùng trong Kho sự kiện cho điều đó cho rễ tổng hợp? (Giả sử việc thực hiện liên tục cho phép xóa)
Điều đó sẽ có ý nghĩa với tôi rất nhiều (và sẽ là một lợi ích tuyệt vời khác của sự kết hợp này) nhưng như tôi đã nói tôi có thể đưa ra những giả định này dựa trên sự hiểu biết không chính xác / không đầy đủ về các khái niệm này.
Tôi hy vọng điều này đã không quá dài dòng.
Cảm ơn.