Trong DDD, một thư mục tổng hợp có thể có một kho lưu trữ. Hãy để chúng tôi lấy số Đơn đặt hàng tổng hợp và đối tác không liên tục của nó OrderRepository và đối tác liên tục OrderUoW. Chúng tôi cũng có ProductVariant tổng hợp theo dõi khoảng không quảng cáo của sản phẩm theo thứ tự. Sản phẩm có thể có ProductVariantRepository và ProductVariantUoW.Trong DDD, một UoW cho mỗi Kho hoặc Ngữ cảnh hoặc Giao dịch bị ràng buộc?
Cách đơn đặt hàng và ProductVariant hoạt động là trước khi đơn đặt hàng được duy trì, kiểm tra khoảng không quảng cáo. Nếu có hàng tồn kho, thứ tự sẽ được duy trì bằng cách gọi OrderUoW.Commit(). Có, ProductVariantUoW.Commit() sẽ được gọi bên cạnh để cập nhật khoảng không quảng cáo của sản phẩm.
Những điều không thể xảy ra, người dùng đã mua các sản phẩm tương tự trong thời gian ngắn đó (Hãy xem đây là ứng dụng web nơi hai người dùng đang mua cùng một sản phẩm). Bây giờ toàn bộ giao dịch cho người dùng thứ hai sẽ không thành công bằng cách hoàn nguyên thứ tự vừa tạo. Tôi có nên gọi cho OrderUoW để khôi phục các thay đổi (thứ tự sẽ bị xóa khỏi db) không? Hoặc tôi nên đặt cả hai hoạt động UoW.Commit() trong một phạm vi giao dịch, do đó, không một cam kết() sẽ khôi phục các thay đổi? Hoặc cả hai kho lưu trữ (Order, ProductVariant) chỉ nên có UoW và nó chỉ cần có một phạm vi giao dịch?
Tôi có thể làm cho câu chuyện ngắn gọn bằng cách nói, cách giao dịch được xử lý khi có nhiều kho lưu trữ có liên quan?
Cảm ơn Erik. Hãy để tôi làm rõ rằng bất cứ điều gì tôi đã mô tả trong bài đăng gốc sẽ xảy ra trong lớp dịch vụ ứng dụng, không phải trong lớp miền. Tầng dịch vụ ứng dụng đang điều phối kho lưu trữ, UoW của Order và ProductVariant để gửi một đơn đặt hàng. Câu hỏi của tôi trong bài viết gốc là về thực hiện giao dịch khi có hai UoW có sẵn? –
Tôi nghĩ rằng bạn cần phải soạn UoW nhỏ hơn thành một UoW lớn hơn có hiệu quả làm cho cả hai thành một giao dịch duy nhất. Xem thêm http://stackoverflow.com/a/11658021/471129. –