2013-04-10 25 views
14

Tôi đã chuyển sang dự án đang tích cực sử dụng nguồn sự kiện CQRS +. Từ cái nhìn đầu tiên nó được thực hiện phù hợp với tất cả những cuốn sách và blog, nhưng cuối cùng tôi nhận ra những gì chính xác là peevish trong việc thực hiện.Đọc các phương pháp triển khai bên sử dụng CQRS

Đây là CQRS kiến ​​trúc: CQRS design

Nguyên Tôi chụp bức ảnh này từ here.

Như chúng ta có thể thấy trong hình, bên đọc nhận các sự kiện từ hàng đợi và chuyển từng cái một vào các bộ dự khác nhau (các bộ biến đổi) và kết quả là ViewModels được lưu thông qua phương thức AddOrUpdate vào DB. Vì vậy, như tôi hiểu từ bộ biến đổi hình ảnh chỉ có thể dựa vào sự kiện chính nó cộng với dữ liệu từ db bên đọc. Ví dụ:

  1. Chế độ xem tài khoản đã được lưu trữ trong db.
  2. kiện
  3. EmailChanged đến
  4. Chúng ta đọc xem tài khoản từ DB
  5. Áp dụng thay đổi email tới nó
  6. Chúng tôi tiết kiệm tài khoản trở lại vào DB.

Một trường hợp khác (đếm số lượng của một số mặt hàng, nói đơn đặt hàng):

  1. OrderCreated kiện đến
  2. Chúng ta đọc thấy ViewModel đại diện NumberOf trước đến đơn đặt hàng
  3. Tăng và tiết kiệm này.

Những gì chúng tôi có trong dự án của chúng tôi: Chúng tôi chỉ sử dụng tất cả những sự kiện đó làm thông báo thay đổi trong mô hình miền. Do đó, những gì chúng tôi làm:

  1. Chúng tôi lấy kho lưu trữ tên miền và đọc tất cả các tập hợp cần thiết. Làm như vậy chúng tôi nhận được trạng thái gần đây nhất của họ.
  2. Chúng tôi chỉ xây dựng đối tượng ViewModel từ đầu
  3. Lưu mới được tạo ra đối tượng vào Db

Cách tiếp cận chúng tôi sử dụng trong dự án của chúng tôi trông hơi xa lạ với tôi, tôi không thể nhìn thấy tất cả các nhược điểm của nó Tuy nhiên. Nếu chúng ta cần xây dựng lại mặt đọc của mình, chúng ta thêm bộ chuẩn hóa "hoạt động" và lần sau nó nhận được một sự kiện cụ thể, nó sẽ tái tạo mô hình khung nhìn mới.

Nếu chúng ta sử dụng cách tiếp cận từ sách, tôi sẽ phải có một logic utils riêng biệt ở đâu đó trong hệ thống của tôi để xây dựng lại.Điều chúng ta cần cho việc này:

  1. Thả phía đọc
  2. đã đọc tất cả các sự kiện từ các cửa hàng sự kiện từ đầu
  3. Vượt qua chúng thông qua các dự

Vì vậy, câu hỏi của tôi là:
Cách tiếp cận phù hợp ở đây là gì?

Trả lời

5

Cách tiếp cận chúng tôi sử dụng trong dự án có vẻ hơi lạ đối với tôi, tôi không thể xem tất cả các mặt hạn chế của nó.

Một nhược điểm nổi bật là khi nhận được sự kiện, bạn phải thực hiện cuộc gọi bổ sung vào kho lưu trữ của tập hợp tương ứng. Điều này có nghĩa là kho lưu trữ này phải được hiển thị trực tiếp hoặc dưới dạng dịch vụ. Ngoài các phụ thuộc tăng thêm là IO bổ sung.

Để xây dựng lại từ cửa hàng sự kiện, cách tiếp cận bạn mô tả là phương pháp được chấp nhận chung. Cách tiếp cận được mô tả here sử dụng nhật ký sự kiện dành riêng cho việc xây dựng lại các phép chiếu. Điều này có thể được sử dụng để giải quyết các vấn đề hiệu suất trong khi xây dựng lại. Ngoài ra, hãy xem Scalable and Simple CQRS Views in the Cloud và trên DDD/CQRS mailing list.

+1

Liên kết cho bài viết của bài viết được chuyển đến: http://abdullin.com/post/event-sourcing-projections/ –

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