Come esercizio per costruire siti web e mettere in pratica il DDD, attualmente sto pianificando la creazione di un'app di votazione del pubblico basata su un videogioco che suono spesso. Il videogioco consente alle persone di costruire basi che possono essere attaccate da altri giocatori. Nell'app, voglio che gli utenti possano votare o votare giù per una base. Votare una base aumenterà il punteggio, mentre il voto di una base diminuirà il punteggio.
Ho identificato sia gli utenti che le basi come aggregati al mio dominio, in cui le basi avranno un valore di punteggio basato sul numero di utenti che hanno votato la base su e giù. Quando un aggregato di base viene votato da un aggregato di utenti, l'aggregato di base controlla se l'aggregato utente ha già votato tale base. Succederà:
- Se l'aggregato utente ha votato la base, il punteggio dell'aggregato di base rimarrà lo stesso.
- Se l'aggregato utente non ha ancora votato l'aggregato di base, il punteggio dell'aggregato di base verrà incrementato di uno.
- Se l'aggregato utente ha votato in ribasso l'aggregato di base, il punteggio dell'aggregato di base verrà incrementato di due.
Il contrario si verifica quando un utente vota una base in basso. Quindi l'invariante terrà tale che il punteggio di una base = (user up voti - user down vote) di cui l'aggregato di base sarà responsabile di mantenimento. Ciò implica che l'aggregato di base sarà responsabile di tenere traccia di quali utenti hanno votato su di esso.
Voglio anche implementare una funzione in cui un utente può visualizzare tutte le basi che ha votato. Ciò implicherebbe che l'aggregato di utenti sarebbe responsabile di tenere traccia di quali basi hanno votato.
Quale gruppo di domini dovrebbe mantenere la responsabilità di mantenere quale utente ha votato su quale base? Devo creare un nuovo aggregato di voto che mantenga queste responsabilità?