2012-06-24 31 views
6

Từ những gì tôi đã đọc, thiết kế CQRS liên quan đến các lệnh không đồng bộ khi các lệnh được đặt trong hàng đợi. Người sử dụng giả định tất cả là okay và các cuộc thăm dò giao diện người dùng hoặc thông qua một bộ đếm thời gian được một số thức ăn trở lại nếu tất cả làm việc hay không.Các lệnh có phải không đồng bộ trong CQRS không?

Làm cách nào điều này có hiệu quả nếu tôi có giao diện người dùng nơi tôi đang kéo thư mục trong cây? Tôi có thể có một người dùng xóa một thư mục trong khi một người khác kéo một thư mục vào nó (để biến nó thành một thư mục con của nó). Vì vậy, từ giao diện người dùng, tôi có thể cho thấy kéo đã diễn ra và sau đó từ trong một số kiểm tra bộ đếm thời gian để xem mô hình đọc của tôi đã được cập nhật hay chưa. biết nó đã làm việc).

Nếu người dùng đã thực hiện một số hoạt động kéo, tôi sẽ phải giữ một danh sách các hoạt động này trong giao diện người dùng và kiểm tra cửa hàng đọc (loại bỏ bất kỳ lệnh thành công nào từ danh sách).

Có thể có cách tốt hơn để thực hiện việc này.

Có vẻ như rất nhiều công việc trên giao diện người dùng và dễ bị lỗi hơn trong khi nếu tôi chỉ chạy một lệnh đồng bộ và nếu tất cả đều ổn, thì tôi chuyển sang hoạt động tiếp theo.

Trả lời

5

Trong khi bạn có thể sử dụng các lệnh đồng bộ, nó sẽ không làm cho vấn đề bạn mô tả bất kỳ vấn đề nào ít hơn; nó sẽ chỉ có nghĩa là hành vi hơi khác nhau khi thông báo cho người dùng.

Điều cần nhận biết về lệnh là chúng có thể bị từ chối bởi các đối tượng miền. Điều đó có thể có nghĩa trong trường hợp này là người dùng đầu tiên thực hiện thay đổi và sau đó những thay đổi mà người dùng thứ hai tạo ra có thể bị từ chối vì chúng tham chiếu đến trạng thái không hợp lệ.

Nếu bạn muốn trình bày trạng thái hiện tại của hệ thống cho tất cả người dùng, ui của bạn sẽ phải thực hiện tất cả công việc mà bạn quan tâm; đó không phải là duy nhất cho CQRS.

+0

Cảm ơn bạn đã trả lời. –

+0

Tôi thấy điều này càng cố gắng để thông báo cho người dùng càng sớm càng tốt liệu hành động của họ có thành công hay không. Vì vậy, theo quan điểm của tôi, nó không tốt từ quan điểm khả năng sử dụng UI để cho phép người dùng vui vẻ kéo các thư mục chỉ để "gọi lên máy chủ" vài giây sau đó và tìm ra tất cả các hành động này đã bị từ chối - Tôi nghĩ người dùng nên được thông báo đi thẳng. Trường hợp tương tự cho các vấn đề với lưu dữ liệu (nghĩ rằng xác nhận!), Và hầu hết nếu không phải tất cả các điều kiện lỗi khác. – Dav

+0

"Phấn đấu để thông báo cho người dùng càng sớm càng tốt liệu hành động của họ có thành công hay không" không phải là yêu cầu phổ quát mà mọi hệ thống đều phải đáp ứng. Nếu trạng thái hiện tại của ứng dụng là rất quan trọng để xác định các hành động có sẵn cho người dùng thì các lệnh không đồng bộ có lẽ không phải là quyết định thiết kế tốt nhất, nhưng điều đó không có nghĩa là sử dụng các lệnh đồng bộ là một số viên đạn ma thuật. * giữa các lệnh được cấp bởi một người dùng *. – arootbeer

3

Bạn có thể sử dụng rất tốt các lệnh đồng bộ. Các lệnh không đồng bộ không cần thiết cho CQRS.

Các vấn đề liên quan