ฉันเริ่มต้นด้วย DDD และเข้าใจว่ามีการใช้รากรวมเพื่อรับรองความมั่นคงข้ามชาติ เราไม่ควรแก้ไขการรวมหลายรายการในบริการแอปพลิเคชันเดียว
ฉันต้องการทราบวิธีจัดการกับสถานการณ์ต่อไปนี้
ฉันมีรูทรวมที่เรียกว่าผลิตภัณฑ์
นอกจากนี้ยังมีรูทรวมที่เรียกว่ากลุ่ม
ทั้งสองมีรหัสและสามารถแก้ไขได้อย่างอิสระ
ผลิตภัณฑ์หลายรายการสามารถชี้ไปที่กลุ่มเดียวกัน
ฉันมีบริการแอปพลิเคชันที่สามารถเปลี่ยนกลุ่มของผลิตภัณฑ์:
ProductService.ChangeProductGroup(string productId, string groupId)
- ตรวจสอบกลุ่มที่มีอยู่
- รับผลิตภัณฑ์จากพื้นที่เก็บข้อมูล
- ตั้งค่ากลุ่ม
- เขียนผลิตภัณฑ์กลับไปที่ที่เก็บ
ฉันยังมีบริการแอปพลิเคชันที่สามารถลบกลุ่มได้:
GroupService.DeleteGroup(string groupId)
1. รับผลิตภัณฑ์จากที่เก็บซึ่ง groupId ถูกตั้งค่าเป็น groupId ที่ระบุตรวจสอบให้แน่ใจว่าการนับเป็น 0 หรือยกเลิก 2. ลบกลุ่มจากที่เก็บกลุ่ม 3. บันทึกการเปลี่ยนแปลง
คำถามของฉันคือสถานการณ์ต่อไปนี้จะเกิดอะไรขึ้นถ้า:
ใน ProductService.ChangeProductGroup เราจะตรวจสอบกลุ่มที่มีอยู่ (เช่นนั้น) จากนั้นหลังจากการตรวจสอบนี้ผู้ใช้ที่แยกต่างหากจะลบ productGroup (ผ่าน GroupService.DeleteGroup อื่น) ในกรณีนี้เราตั้งค่าการอ้างอิงถึงผลิตภัณฑ์ที่เพิ่งถูกลบ?
นี่เป็นข้อบกพร่องในการออกแบบของฉันที่ฉันควรใช้การออกแบบโดเมนที่แตกต่างกัน (เพิ่มองค์ประกอบเพิ่มเติมถ้าจำเป็น) หรือฉันจะต้องใช้การทำธุรกรรม?