Tôi đang bắt đầu với DDD và hiểu rằng rễ tổng hợp được sử dụng để đảm bảo tính nhất quán xuyên quốc gia. Chúng ta không nên sửa đổi nhiều tập hợp trong một dịch vụ ứng dụng.
Tuy nhiên, tôi muốn biết làm thế nào để đối phó với tình huống sau đây.
Tôi có một gốc tổng hợp được gọi là Sản phẩm.
Ngoài ra còn có một gốc tổng hợp được gọi là Nhóm.
Cả hai đều có Id và có thể được chỉnh sửa độc lập.
Nhiều sản phẩm có thể trỏ đến cùng một nhóm.
Tôi có một dịch vụ ứng dụng có thể thay đổi nhóm sản phẩm:
ProductService.ChangeProductGroup(string productId, string groupId)
- Kiểm tra nhóm tồn tại
- Nhận sản phẩm từ kho lưu trữ
- Đặt nhóm của nó
- Viết sản phẩm trở lại kho lưu trữ
Tôi cũng có một dịch vụ ứng dụng nơi nhóm có thể bị xóa:
GroupService.DeleteGroup(string groupId)
1. Nhận sản phẩm từ kho lưu trữ có groupId được đặt thành groupId được cung cấp, đảm bảo số lượng là 0 hoặc hủy bỏ 2. Xóa nhóm khỏi kho lưu trữ nhóm 3. Lưu thay đổi
Câu hỏi của tôi là kịch bản sau đây, điều gì sẽ xảy ra nếu:
Trong ProductService.Change Producttgroup, chúng tôi kiểm tra nhóm tồn tại (sau đó), sau khi kiểm tra, một người dùng riêng biệt sẽ xóa sản phẩm Groupgroup (thông qua GroupService.Deletegroup khác). Trong trường hợp này, chúng tôi đặt tham chiếu đến một sản phẩm vừa bị xóa?
Đây có phải là một lỗ hổng trong thiết kế của tôi ở chỗ tôi nên sử dụng một thiết kế tên miền khác (thêm các yếu tố bổ sung nếu cần thiết) hay tôi sẽ phải sử dụng các giao dịch?