Cześć,
Mam pytanie bo w sumie nie do końca jestem pewny jak to poprawnie rozwiązać C# + EF Core
Sytuacja uproszczona: Mamy 2 agregaty - Item i Warehouse. Każdy z nich ma ExternalId (Guid) po to żeby identyfikować je na zewnątrz i Id bazodanowe. Item jest przypisany do Warehouse i podczas tworzenia Itemu musi być też znany Warehouse.
Czy podczas tworzenia (i updateu) itema powinno przekazywać się cały obiekt Warehouse, czy tylko jego Id (bazodanowe) ?
Np:
public Item(Warehouse warehouse,..)
czy
public Item(long warehouseId,..)
Podobnie z innymi operacjiami które wymagają tylko znajomości samego Warehousu a nie jego specyficznych właściwości.
Mam z tym problem bo z jednej strony czytam że agregat nie pownien przechowywać referencji do innego agregatu, a z drugiej przekazywanie Id bazodanowego do agregatu agregatu jest wyciekiem szczegółu implementacji (relacyjna baza jako sposób przechowywania) do domeny. Moim zdaniem lepszą opcją jest wersja pierwsza, ale poprawcie mnie jeśli się mylę.
Przekazywanie ExternalId :
public Item(Guid warehouseId,..)
nie wchodzi w grę bo w zasadzie nie rozwiązuje żadnego problemu - kluczami w bazie są id bazodanowe a nie ExternalId