2015-05-25 22 views
7

~ TLDR: Tôi đang triển khai giải pháp CQRS + DDD cho một trong các dự án lớn hơn của mình, và tôi tự hỏi có lý do thực sự nào không. các đối tượng lệnh cho tập hợp của tôi, trong một số ít các trường hợp, nơi đối tượng lệnh là dữ liệu phong phú? Tôi không thể tìm thấy bất kỳ lý do cụ thể tại sao điều này sẽ được bất kỳ loại của một mô hình chống, và tôi không thể tìm thấy bất kỳ ý kiến ​​mà đi vào chi tiết tuyệt vời về loại thiết kế.Truyền lệnh CQRS trực tiếp tới các đối tượng miền

Bối cảnh: Tôi đã triển khai các hệ thống CQRS trước đây và tôi đã triển khai các ứng dụng DDD, nhưng không bao giờ CQRS + DDD trong một ứng dụng định hướng theo phong cách miền Eric Evans phù hợp. Vì vậy, tôi hỏi vì tôi không muốn lạm dụng Tổng hợp của tôi, và làm tổn thương ứng dụng của tôi trong thời gian dài.

Ví dụ về đối tượng lệnh của tôi có khá nhiều dữ liệu sẽ là lệnh đăng ký có trên 8 trường (tên, họ, tên ưa thích, dob, tiêu đề, tên người dùng, mật khẩu, bộ phận, v.v.). Nó cảm thấy rất khó xử khi tạo một phương thức trên Tổng hợp của tôi có 8 tham số và giải pháp thay thế bằng cách sử dụng một số loại dto và xử lý lệnh của tôi cho lệnh dto - hoặc tự động sử dụng automapper, hoặc inline - có vẻ như không cần thiết và không thêm giá trị trừu tượng.

Tôi cũng có thể thấy các trường hợp sử dụng trong tương lai nơi các lệnh có thể là dữ liệu phong phú (nó sẽ không phải là một tỷ lệ lớn lệnh, nhưng vẫn có một vài lệnh). từ lúc bắt đầu.

+0

Theo như tôi nhớ, DDD không nói chính xác cách triển khai Mô hình miền nhưng CQRS thực hiện. Không có xung đột ở đây. Về đối tượng lệnh đơn giản, làm thế nào bạn vượt qua chúng để tổng hợp? Tôi đoán bạn có một giao diện trừu tượng mà cả hai phụ thuộc vào. – neleus

+0

Tôi chuyển dữ liệu lệnh (không phải đối tượng lệnh thực) đến tổng hợp thông qua các tham số. Lệnh này được nhận bởi một trình xử lý tải lên tổng hợp, và chỉ cần truyền nó theo những gì nó cần thông qua một phương thức được thiết kế phù hợp. Thông thường nó chỉ là một hoặc một vài thông số, đó là cách tôi thích nó, như tôi tin rằng một tập hợp được thiết kế tốt nên có phương pháp đòi hỏi rất ít tham số. Nếu không nó có thể vi phạm SRP bằng cách nào đó. Tuy nhiên, có một số trường hợp cạnh có nhiều tham số có thể được yêu cầu. – AaronHS

+0

Bạn có xem xét chuyển toàn bộ đối tượng lệnh đến Tổng hợp không? Nó trông đơn giản, không có khuyết điểm ở đây. – neleus

Trả lời

10

Đối tượng lệnh thường được thể hiện dưới dạng nguyên thủy trong khi chữ ký tổng hợp phương thức sẽ được thể hiện trong khái niệm miền.

Thực tế là bạn đã không nhận ra ngay rằng có thể có nghĩa là bạn đã bỏ lỡ rất nhiều cơ hội để làm cho các khái niệm tiềm ẩn rõ ràng trong miền của bạn.

"một lệnh đăng ký mà mất trong 8 + lĩnh vực (firstname, lastname, tên ưa thích, DOB, tiêu đề, tên người dùng, mật khẩu, bộ phận vv)"

gì nên tấn công bạn là firstnamelastname chắc chắn có thể tạo thành một toàn bộ ý nghĩa, chẳng hạn như new FullName(firstname, lastname) và tôi chắc chắn có rất nhiều trường hợp khác mà Value Objects (VO) có thể hoặc nên được sử dụng trong miền của bạn ... Username, Password, v.v ...? Sử dụng VO để mô hình hóa những thứ thay đổi cùng nhau sẽ mô tả tốt hơn mô hình của bạn cũng như giảm số lượng đối số bạn phải vượt qua.

Vì vậy, điều đó làm cho lệnh đối tượng ứng cử viên nghèo là đối số phương pháp tổng hợp. Nếu bạn đi xuống con đường đó, bạn chắc chắn sẽ bỏ lỡ cơ hội làm mẫu.

+0

Điều đó có ý nghĩa hoàn hảo. Cảm ơn câu trả lời, cũng như giải thích rõ ràng về * tại sao * – AaronHS

2

Đồng ý với @plalx. Lấy các lệnh làm đối số phương thức tổng hợp có thể dẫn đến việc có quá nhiều mã bản đồ bên trong tập hợp: Lập bản đồ các kiểu nguyên thủy cho các đối tượng miền, tốt hơn là đặt các đối tượng miền.

Nhưng đối với các dự án đơn giản hơn, tôi nghĩ rằng đó là khởi đầu tốt.

Trong trường hợp đăng ký, ngữ cảnh bị giới hạn thường là miền hỗ trợ và độ phức tạp thường đến từ tích hợp bên ngoài (thông báo qua email, đăng ký bằng tài khoản xã hội, v.v.). Trong trường hợp này, tôi nghĩ rằng sự tích hợp ngữ cảnh được giới hạn là quan trọng hơn các mô hình bên trong. Vì vậy, lấy lệnh làm đối số phương pháp tổng hợp có thể là một khởi đầu nhanh chóng để hoàn thành công việc và tiết kiệm thời gian của bạn để tập trung vào miền chính của bạn.

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