Come si fa correttamente riferimento a un'entità all'interno di un aggregato? Ad esempio, dall'indice di un elenco (non sembra intelligente se si ordina nuovamente l'elenco); un GUID (pensato che doveva essere locale?); o qualche altro contatore incrementale?
Ad esempio:
class Cart
{
public IReadOnlyList<Item> Items => _items.ToList();
public AddItem(Item item)
{
}
public RemoveItem(/* Item or ItemId or index (int)? */) <- Here
{
_items.Remove(xxxxx); // <- And here
}
private readonly List<Item> _items = new List<Item>(); // Maybe need different data structure
}
class Item
{
// Local identity here?
public int Quantity { get; private set; }
public Item(Product product)
{
// use product properties needed
}
// other item properties
}
Sembra errato che un client debba restituire un List<Item>
da Cart
per poi utilizzare l'indice per rimuovere l'elemento. Inoltre, se istanzio l'elemento al di fuori della classe prima di aggiungerlo, come impongo un ID locale (avrei un GUID se l'istanziazione all'esterno)?
TL; DR come trattare con le identità locali delle entità (ad esempio, come locale è "locale")?