@Aventus:
A w przypadku, gdy dla każdego typu polisy generowałeś jakieś ID to jak potem wyliczałeś, która z tych wszystkich różnych polis jest tą najnowszą? No bo wyobrażam sobie, że te różne polisy przechodziły w siebie, czyli zmieniały stan i w tym momencie jakoś trzeba sprawdzić, która jest ta ostatnia.
Podobnie w jaki sposób się zabezpieczałeś, żeby nie wykonano żądania z jakimś poprzednim ID?
Załóżmy, że zapisałeś jeden z rodzajów polisy z ID=1, potem user wykonał jakieś akcje i zapisałeś tą samą polisę z ID=2. Jak teraz zabezpieczyć się przed tym, żeby user nie wykonał akcji na polisie z ID=1?
Hmm nie chodzi mi o reprezenetacje widoku, bardziej chodzi o mi to, że jak mam sobie agregat Order to zazwyczaj mam RESTy ze ścieżką /orders.
A co jeśli rozbijam swój Order na mniejsze agregaty typu DraftOrder, AcceptedOrder itd? Również powinienem zmienić RESTy na /draftorder, /acceptedorder order itd? Np jak chce wysłać żądanie akceptacji draftu oferty.
EDIT: Nie mogłem spać po yerbie i rozkminiałem kilka h w nocy strategię na zamodelowanie tych wielu stanów orderu.
Załóżmy, że mamy tak jak mówiłem DraftOrder, AcceptedOrder, ConfirmedOrder oraz doszedł nowy typ: VipOrder, który nie musi być akceptowany, żeby był potwierdzony.
W klasycznym podejściu z 1 uber agregatem Order, mamy :
- wywołanie REST
/orders/{id}/confirm
- i metodę confirm w
Order, która ma
w środku :
Kopiuj
if(status == VIP || status == ACCEPTED) {
status = CONFIRM;
}
W podejściu z rozbiciem na mniejsze agregaty jak pisałem wyżej musimy jakoś drajwować te statusy.
Moim pierwszym pomysłem było zrobienie RESTów w stylu:
/acceptedorders/{id}/confirm ORAZ /viporders/{id}/confirm
Wtedy front znając obecny status zamówienia, który sobie pobrał z jakiegoś query service wie jaki ma wywołać endpoint i po stronie backendu uruchamiamy konkretny usecase:
ConfirmAcceptedOrder lub ConfirmVipOrder.
Nie podoba mi się to jednak z tego względu, że frontowi mówimy o wewnętrznej implementacji domeny i o tym jakie mamy byty.
Jeszcze inna strategia to zostanie przy klasycznym REST:
/orders/{id}/confirm
Ale wtedy po stronie backendu musimy jakoś drajwować to, czy użyć AcceptedOrderRepo czy też VipOrderRepo.
Wiadomo, że w warstwie aplikacji mogę pobrać z pierwszego repo i jeśli nie znajdzie to pobrać z drugiego repo i dopiero rzucić wyjątek lub zwrócić error jak nie znajdzie, ale to takie dziwne mi się wydaje.
Może po prostu VipOrder oraz AcceptedOrder powinny być jednym agregatem skoro mają to samo zachowanie confirm i wtedy nie ma problemu.
No właśnie .. tu szukam poprawnych strategii.
Wzywam też @Charles_Ray jeśli ma czas i chęci bo zawsze coś sensownego powie ;p
Tak w ogóle to zacząłem się nad tym zastanawiać https://bottega.com.pl/nabor-otwarty-ddd-online
Był ktoś?