Я починаю з DDD і розумію, що сукупні корені використовуються для забезпечення транснаціональної узгодженості. Ми не повинні змінювати кілька агрегатів в одній службі додатків.
Мені хотілося б знати, як вирішити наступну ситуацію.
У мене є сукупний корінь під назвою Продукти.
Існує також сукупний корінь під назвою Group.
В обох є ідентифікатори, і їх можна редагувати самостійно.
Кілька продуктів можуть вказувати на одну групу.
У мене є служба додатків, яка може змінити групу товару:
ProductService.ChangeProductGroup(string productId, string groupId)
- Група перевірок існує
- Отримайте продукт із сховища
- Встановіть його групу
- Поверніть продукт назад у сховище
Також у мене є служба додатків, де можна видалити групу:
GroupService.DeleteGroup(string groupId)
1. Отримайте продукти з сховища, для якого groupId встановлено наданий groupId, переконайтеся, що кількість дорівнює 0 або скасувати. Видалити групу з сховища груп 3. Зберегти зміни
Моє запитання полягає в наступному сценарії, що буде, якщо:
У ProductService.ChangeProductGroup ми перевіряємо, чи існує група (вона є), а відразу після цієї перевірки окремий користувач видаляє productGroup (через іншу GroupService.DeleteGroup). У цьому випадку ми встановлюємо посилання на щойно видалений продукт?
Це недолік мого дизайну в тому, що я повинен використовувати інший дизайн домену (додаючи додаткові елементи, якщо потрібно), чи мені доведеться використовувати транзакції?