Tôi đang sử dụng CQRS + ES và tôi có vấn đề về mô hình hóa không thể tìm thấy giải pháp cho.
Bạn có thể bỏ qua bên dưới và trả lời câu hỏi chung trong tiêu đề: Bạn sẽ truy vấn dữ liệu cần thiết cho logic kinh doanh ở đâu?
Xin lỗi vì nó trở thành một câu hỏi phức tạp, tâm trí của tôi bị xoắn vào lúc này !!!
Đây là vấn đề:
Tôi có người dùng là thành viên của nhóm. Đó là một mối quan hệ nhiều đến nhiều. Mỗi người dùng có trạng thái sẵn có cho mỗi nhóm.
Các đội nhận được vé, mỗi đội có một hệ số tải nhất định, nên được chỉ định cho một trong các thành viên của nhóm tùy thuộc vào tình trạng sẵn có và tổng tải trọng của họ.
Vấn đề đầu tiên, Tôi cần truy vấn danh sách người dùng có sẵn trong nhóm và chọn người có ít tải nhất vì anh ấy đủ điều kiện cho bài tập. (cần lưu ý rằng đây là một trong những trường hợp, nó có thể là một truy vấn khác nhau để chạy)
Second Issue, hệ số tải của một vé có thể thay đổi vì vậy tôi phải đi mà vào xem xét khi tính tổng tải mỗi người dùng . Lưu ý rằng mặc dù vé có thể thuộc về 1 nhóm, nhiệm vụ phải dựa trên tổng tải của người dùng chứ không phải tải của anh ấy cho mỗi đội đó.
Hiện tại, TicketReceivedEvent được nhận bởi ngữ cảnh giới hạn này và tôi nên kích hoạt luồng công việc để gán vé đó cho người dùng.
Giải pháp có thể:
CQRS + ES - Nơi truy vấn Dữ liệu cần thiết cho logic nghiệp vụ?
- Cách đơn giản nhất sẽ được xếp hàng tuần tự các sự kiện và gửi một AssignTicketToUser lệnh và có một truy vấn dịch vụ mô hình đọc cho user id, có người sử dụng và user.assignTicket (Ticket). Khi TicketAssignedEvent được nhận, hãy gửi lệnh gán tiếp theo. Nhưng nó có vẻ là một lá cờ đỏ để truy vấn mô hình đọc từ bên trong trình xử lý lệnh! và một rắc rối để xếp hàng tất cả các vé này!
- Có một người quản lý quy trình cho mỗi người dùng với tính khả dụng/nhóm và vé được chỉ định cho người dùng đó. Trong trường hợp đó, chúng tôi thay thế truy vấn sang bên đọc bằng truy vấn "quản lý quá trình tra cứu" và trình xử lý lệnh sẽ gọi Ticket.AssignTo (Người dùng). Con là tôi nghĩ quá nhiều logic kinh doanh bị rò rỉ bên ngoài mô hình miền cụ thể là chúng tôi đang kéo tất cả thông tin/mô hình từ Tổng hợp người dùng để làm cho nó có sẵn để truy vấn
Tôi có xu hướng đi với giải pháp đầu tiên, nó có vẻ dễ dàng hơn để duy trì, sửa đổi/mở rộng và xác định vị trí trong mã nhưng có thể có một cái gì đó tôi đang mất tích.
Thx cho câu trả lời, hiện tại tôi đang sử dụng một db mssql và mô hình hóa cửa hàng sự kiện trong đó. Im serializing sự kiện và lưu chúng. Chỉ để chắc chắn rằng tôi hiểu chính xác, bạn đang nói tôi nên truy vấn phía đọc từ trình xử lý lệnh. – hsen
Không, tôi nói, bạn nên có một số chỉ mục truy vấn được sử dụng để xác định các thực thể kinh doanh theo một tiêu chí kinh doanh. Nó vẫn là một phần của mô hình 'lệnh' – MikeSW
Điều này rơi vào tùy chọn thứ hai tôi đoán. Tôi đã lưu các tiêu chí cần thiết trong trình quản lý quy trình của mình và sau đó truy vấn được thực hiện bởi bộ định tuyến để định vị trình quản lý quy trình/saga phù hợp để xử lý TicketCreatedEvent. – hsen