Tôi đang gặp một số khó khăn khi tìm ra cách tốt nhất để xử lý một tình huống khá phức tạp. Tôi đã nhìn thấy khá một vài câu hỏi tương tự, nhưng không ai giải thích kịch bản này cho sự hài lòng của tôi.DDD - Sửa đổi các đối tượng con trong tổng hợp
Một thứ tự (tổng hợp root) được tạo ra với nhiều OrderLines (đơn vị trẻ em). Theo quy tắc kinh doanh, mỗi OrderLine phải duy trì cùng một bản sắc cho cuộc đời của Lệnh. OrderLines có nhiều (20+) tài sản và có thể được biến đổi khá thường xuyên trước khi đặt hàng được coi là "bị khóa". Ngoài ra, có những bất biến phải được thực thi ở cấp cơ sở; ví dụ, mỗi thứ tự dòng có số lượng và tổng số lượng cho các đơn hàng không thể vượt quá X.
Tôi không chắc chắn làm thế nào để mô hình kịch bản này khi xem xét những thay đổi để OrderLines. Tôi có 4 lựa chọn mà tôi có thể quan niệm, nhưng không có sự lựa chọn nào thỏa đáng:
1) Khi đến lúc sửa đổi một Dòng đơn, hãy sử dụng tham chiếu do gốc cung cấp. Nhưng tôi mất khả năng kiểm tra logic bất biến trong thư mục gốc.
var orderLine = order.GetOrderLine(id);
orderLine.Quantity = 6;
2) Gọi phương thức theo thứ tự. Tôi có thể áp dụng tất cả các logic bất biến, nhưng sau đó tôi bị mắc kẹt với một sự gia tăng của các phương pháp để thay đổi các thuộc tính nhiều Hang:
order.UpdateOrderLineQuantity(id, 6);
order.UpdateOrderLineDescription(id, description);
order.UpdateOrderLineProduct(id, product);
...
3) Điều này có thể được dễ dàng hơn nếu tôi đối xử với Hang như một đối tượng giá trị gia tăng, nhưng nó phải duy trì cùng một danh tính cho mỗi yêu cầu kinh doanh.
4) Tôi có thể lấy tham chiếu đến OrderLines cho sửa đổi mà không ảnh hưởng đến bất biến, và đi qua theo thứ tự cho những người làm. Nhưng sau đó những gì nếu bất biến bị ảnh hưởng bởi hầu hết các thuộc tính OrderLine? Phản đối này là giả thiết, vì chỉ có một vài thuộc tính có thể ảnh hưởng đến bất biến, nhưng điều đó có thể thay đổi khi chúng ta phát hiện thêm logic kinh doanh.
Bất kỳ lời đề nghị được đánh giá cao ... đừng ngần ngại cho tôi biết nếu tôi là dày đặc.
Cảm ơn bạn đã trả lời của bạn - Tôi nghĩ rằng nó có lẽ là lựa chọn tốt nhất trong những người tôi đã trình bày của tôi. Tôi đã thực sự hy vọng cho một ai đó để đề xuất một mô hình tốt hơn tôi có thể đã bỏ qua;) Tôi là một chút tinh ranh của việc sử dụng nó, bởi vì nó không sạch sẽ. Hoặc có lẽ một cách tốt hơn để đặt nó ... không nhất quán, như @eulerfx chỉ ra. Nhưng tôi đoán nó sẽ làm cho bây giờ ... – Cork
Tôi biết tôi chấp nhận điều này như là một câu trả lời đã ... nhưng tôi nghĩ về một cách tiếp cận khác nhau. Bạn có thể có phương thức Lưu (IOrderLine) trên Đơn hàng không? Sau đó, tôi có thể chuyển một ref tới Order, tránh một loạt các phương thức chi tiết, và vẫn cho phép Order thực thi các bất biến. – Cork