CQRS, dovrei avere un riferimento aggregato bidirezionale?

0

Supponiamo di avere un personaggio e un giocatore di dominio. Personaggio di proprietà di Player.

Player
   PlayerID : GUID
   OwnedCharacterIDs : Guid[]

Character
   CharacterID : GUID
   OwnerPlayerID : GUID

Mentre la mia logica aziendale richiedeva entrambi i lati dei riferimenti.

La domanda è

Devo avere entrambi i riferimenti di direzione? Ciò farà sì che il ridondante della verità debba gestire la coerenza su entrambi i lati.

O dovrebbe scegliere solo un lato di riferimento. E usare qualche repository (consistenza finale) per fare riferimento a un altro? come questo

CharacterRefRepo
   GetCharacterIDsByOwner(Guid playerID) GUID[]

or maybe

PlayerRefRepo
   GetPlayerIDByCharacterID(Guid characterID) GUID

Aggiornamento:

Ho scoperto che entrambi i metodi sono consistenza finale.

Quindi non è necessario creare un altro repository di supporto solo per il vantaggio di avere un bidirezionale.

    
posta b.ben 26.06.2018 - 04:09
fonte

1 risposta

2

Il problema con i riferimenti bidirezionali è che dovresti tenerli sincronizzati in ogni momento. Questo è difficile considerando la regola che solo un aggregato dovrebbe cambiare alla volta.

L'uso del repository sembra la soluzione giusta.

    
risposta data 26.06.2018 - 06:07
fonte

Leggi altre domande sui tag