Zaczynam od DDD i rozumiem, że do zapewnienia spójności ponadnarodowej używa się zagregowanych korzeni. Nie powinniśmy modyfikować wielu agregatów w jednej usłudze aplikacji.
Chciałbym jednak wiedzieć, jak poradzić sobie z następującą sytuacją.
Mam zagregowany katalog główny o nazwie Produkty.
Istnieje również zagregowany katalog główny o nazwie Grupa.
Oba mają identyfikatory i mogą być edytowane niezależnie.
Wiele produktów może wskazywać na tę samą grupę.
Mam usługę aplikacji, która może zmienić grupę produktów:
ProductService.ChangeProductGroup(string productId, string groupId)
- Grupa kontrolna istnieje
- Pobierz produkt z repozytorium
- Ustaw jego grupę
- Napisz produkt z powrotem do repozytorium
Mam również usługę aplikacji, w której grupę można usunąć:
GroupService.DeleteGroup(string groupId)
1. Pobierz produkty z repozytorium, dla którego groupId jest ustawiony na podany groupId, upewnij się, że liczba wynosi 0 lub przerwij 2. Usuń grupę z repozytorium grup 3. Zapisz zmiany
Moje pytanie dotyczy następującego scenariusza, co by się stało, gdyby:
W ProductService.ChangeProductGroup sprawdzamy, czy grupa istnieje (tak jest), a następnie tuż po tym sprawdzeniu oddzielny użytkownik usuwa productGroup (za pośrednictwem innego GroupService.DeleteGroup). W takim przypadku umieściliśmy odniesienie do produktu, który właśnie został usunięty?
Czy to wada mojego projektu polegająca na tym, że powinienem używać innego projektu domeny (w razie potrzeby dodając dodatkowe elementy), czy też musiałbym używać transakcji?