Tôi hiểu sự khác biệt giữa các lệnh và sự kiện nhưng trong nhiều trường hợp bạn kết thúc với dự phòng và ánh xạ giữa 2 lớp về cơ bản giống nhau (ThingNameUpdateCommand, ThingNameUpdatedEvent). Đối với những trường hợp đơn giản, bạn có thể/bạn sử dụng sự kiện cũng như một lệnh? Mọi người có tuần tự hóa để lưu trữ tất cả các lệnh cũng như tất cả các sự kiện không? Có vẻ như hơi dư thừa với tôi.Lệnh Sourcing Sự kiện vs Sự kiện
Trả lời
Tất cả rất nhiều dư thừa này là vì một lý do nói chung và bạn muốn tránh sử dụng cùng một thông điệp cho hai mục đích khác nhau đối với một số lý do:
- sự kiện Có nguồn gốc phải được phiên bản khi họ thay đổi kể từ khi họ được lưu trữ và tái sử dụng (deserialized) khi bạn hydrate một gốc tổng hợp. Nó sẽ làm cho mọi thứ trở nên hơi khó xử nếu lớp đó cũng đang được sử dụng như một thông điệp.
- Khớp nối được tăng lên, cùng một lớp hiện đang được sử dụng bởi trình xử lý lệnh, mô hình miền và trình xử lý sự kiện ngay bây giờ. De-khớp nối bên lệnh từ sự kiện này có thể đơn giản hóa cuộc sống cho bạn xuống đường.
- Cuối cùng là rõ ràng. Lệnh được phát hành bằng một ngôn ngữ yêu cầu một cái gì đó phải được thực hiện (bắt buộc nói chung). Sự kiện là đại diện cho những gì đã xảy ra (quá khứ thường). Ngôn ngữ này bị lộn xộn nếu bạn sử dụng cùng một lớp cho cả hai.
Cuối cùng, đây chỉ là các lớp dữ liệu, không phải là mã này "cứng". Có nhiều cách để thực sự tránh một số cách gõ cho các kịch bản đơn giản như mã-gen. Ví dụ, tôi biết Greg đã sử dụng các biến đổi XML và XSD để tạo tất cả các lớp cần thiết cho một miền cụ thể trong quá khứ.
Tôi muốn nói rất nhiều trường hợp đơn giản bạn có thể muốn đặt câu hỏi nếu đây thực sự là miền (tức là hành vi lập mô hình) hay chỉ là dữ liệu. Nếu nó chỉ là dữ liệu xem xét không sử dụng nguồn sự kiện ở đây. Dưới đây là một cuộc nói chuyện tương tự Udi Dahan đã nói về việc phá vỡ mô hình miền của bạn để không phải tất cả đều đòi hỏi sự kiện tìm nguồn cung ứng. Tôi là loại phù hợp với cách suy nghĩ này bây giờ bản thân mình.
http://skillsmatter.com/podcast/design-architecture/talk-from-udi-dahan
Sau khi làm việc thông qua một số ví dụ và đặc biệt là trình bày Greg Young (http://www.youtube.com/watch?v=JHGkaShoyNs) Tôi đã đi đến kết luận rằng lệnh là không cần thiết. Họ chỉ đơn giản là sự kiện từ người dùng của bạn, họ đã nhấn nút đó. Bạn nên lưu trữ chúng một cách chính xác giống như các sự kiện khác vì đó là dữ liệu bạn không biết nếu bạn muốn sử dụng nó trong một khung nhìn trong tương lai. Người dùng của bạn đã thêm và sau đó xóa mục đó khỏi rổ hoặc ít nhất là cố gắng. Sau này, bạn có thể muốn sử dụng thông tin này để nhắc người dùng về điều này vào ngày sau đó.
- 1. Liên lạc tổng hợp trong CQRS + DDD + Sự kiện Sourcing
- 2. ComboBox sự kiện: SelectedIndexChanged vs SelectedValueChanged
- 3. CellValueChayed vs CellValidating Sự kiện cho DataGridView
- 4. Sự kiện nhấp hoãn sự kiện
- 5. Sự cố trong sự kiện Đã kiểm tra sự kiện
- 6. Sự kiện lệnh ý định CQRS
- 7. Tăng sự kiện hoặc gửi lệnh?
- 8. Event Sourcing: Sự kiện kích hoạt người khác và xây dựng lại trạng thái
- 9. Đọc Sự kiện Nhật ký Sự kiện Windows Cụ thể
- 10. Ngăn sự kiện nhấp chuột sau sự kiện được tổ chức và sự kiện mouseup
- 11. Sự kiện LongClick cũng kích hoạt Sự kiện nhấp
- 12. Sự kiện chạm ánh xạ JavaScript tới sự kiện chuột
- 13. jQuery - Sự kiện thay đổi sự kiện cháy
- 14. Sự kiện đồng thời dựa trên sự kiện là gì?
- 15. Sự kiện đa nhiệm sự kiện/nhiệm vụ C++
- 16. Tiêu thụ sự kiện "Truy tìm sự kiện cho Windows"
- 17. Sự kiện Bubbling cho Sự kiện tùy chỉnh trong WPF?
- 18. Sự kiện Java và trình nghe sự kiện
- 19. Viết sự kiện cho trình xem sự kiện
- 20. Sự kiện đã trôi qua v Đánh dấu sự kiện?
- 21. Cách đóng các sự kiện Sự kiện máy chủ gửi
- 22. WPF: Sự kiện định tuyến hoặc sự kiện thường xuyên?
- 23. Sự kiện mờ dừng sự kiện nhấp chuột hoạt động?
- 24. sự kiện onclick không kích hoạt sau sự kiện onchange
- 25. sự kiện Backbone
- 26. Sự kiện Cronjob hoặc MySQL?
- 27. Sự khác biệt giữa Tải sự kiện, Kích hoạt sự kiện và Nhập sự kiện trong Biểu mẫu
- 28. Ractive.js preventDefault sự kiện trên proxy kiện
- 29. Nhật ký sự kiện Windows vs Nhật ký văn bản
- 30. Mutex vs tổ chức sự kiện trong Windows
Tôi cũng đang theo hướng này. Tôi đọc một số điểm tốt về việc bạn muốn sự kiện của bạn chứa tất cả dữ liệu cần thiết để làm công việc, đặc biệt khi dữ liệu đó có thể đến từ các hệ thống bên ngoài không có biểu diễn lịch sử. Nhưng bạn chỉ có thể áp dụng thực hành tốt đó cho Lệnh. Đặc biệt là tôi nghĩ nếu bạn muốn làm một cái gì đó rất DDD, không nên có sự khác biệt thực sự giữa các lệnh hoặc sự kiện. Mục đích phải rõ ràng và dữ liệu lịch sử bên ngoài miền của bạn nên được bao gồm. – Arwin
Tôi vẫn cho rằng các lệnh là thừa. Tôi chỉ gọi những gì tôi làm chức năng tìm nguồn cung ứng sự kiện. Một blog gần đây của tôi với ES và F # Elm là một hệ thống hoàn chỉnh: http://anthonylloyd.github.io/blog/2016/11/27/event-sourcing – Ant
Tôi cũng nghĩ rằng sự khác biệt đối với tôi là sử dụng FP thay vì OO . ES ánh xạ tới FP thực sự tốt với các loại tổng hợp là một lược đồ sự kiện có thể mở rộng tự nhiên. Tính bất biến cũng phù hợp thực sự tốt với ES. – Ant