Cześć, mam pytanie związane z projektowaniem agregatów lub generalnie może po prostu obiektów domenowych ... Męczy mnie pewien problem i nie wiem do końca, które rozwiązanie obrać.
Dla przykładu mamy do zrobienia aplikację, która pozwala kupować jakieś rzeczy za jakąś wirtualną walutę (nieważne jaka to waluta i nieważne co to za rzeczy). Każdy użytkownik loguje się za pomocą maila i hasła, posiada swój profil z jakimś zdjęciem i załóżmy zapisanymi preferencjami co do kupowanych przedmiotów, posiada swoje konto z tą wirtualną walutą oraz całą historię swoich zakupów.
I teraz tak .. jedna zasada mówi, żeby jakoś rozbijać te bounded contexty, aby nie powstał jeden wielki agregat .. czyli według tej zasady możemy mieć coś takiego:
UserAuthData z polami email, password i ewentualnie jakieś role bądź dodatkowe info czy loguje się przez media społecznościowe.
UserProfile, gdzie jego id to mail z UserAuthData oraz takie pola jak jego nazwa, zdjęcie, może jakaś lista znajomych.
Account ze stanem konta, gdzie id to również email.
Purchases z listą zakupów, które dokonał.
To taki przykładowy podział gdzie jakoś tam podzieliliśmy konteksty. Niby fajnie .. ale wg zasad projektowania obiektów domenowych cała logika powiinna być zamknięta w ich obrębie.
No i teraz np jeśli chcemy dokonać zakupu to mamy jakąś logikę w Purchaes, ale musimy uderzyć do jakiegoś AccountFacade o stan konta, aby sprawdzić czy jednak możemy dokonać zakupu. Czyli może jednak nie powinno być agregatu Account tylko stan konta musi być trzymany jako ValueObject w Purchases bo tam jest cała zamknięta logika zakupów.
Ale załóżmy, że dochodzi wymaganie, że zakupów nie może wykonać nikt, kto jeszcze nie uzupełnił swojego profilu o zdjęcie (i jakieś tam inne dane) .. i co, ponownie logika wychodzi z obrębu Purchases do innego kontekstu (tutaj do UserProfile). Czyli nadal nie tak ..
Agregat mówi, że ma zawierać w sobie wszystkie reguły logiczne. Czyli według tego jednak UserProfile, Account i Purchaes muszą być zamknięte w jednym wielkim agregacie .. no ale to chyba nie jest roziwązanie :D
Nie wiem jak te problem ugryźć.
Może to po prostu rozkmina dla samej sztuki ale nie daje mi to spokoju, bo często spotykam się z takimi przypadkami jak piszę jakieś apki. Najszczęściej spotykam się z podejścuuem, gdzie dzieli się to na takie małe agregaty i po prostu uderza restami do innych mikroserwisów pytać się o jakieś warunki .. czyli ta logika jest rozproszona jednak.