DDD nell'app di voto della folla

0

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à?

    
posta Matthew Wahner 19.06.2018 - 03:40
fonte

1 risposta

0

Which domain aggregate should keep responsibility of maintaining which user has voted on which base? Should I create a new voting aggregate that would maintain these responsibilities?

Bene, nel mondo reale la gente vota presentando ballots , quindi forse il ballottaggio è un concetto importante anche nel tuo dominio?

Se riesci a scavare un po ', potresti trovare proprietà aggiuntive che confermano che il voto è un'entità importante. Ad esempio, se esegui il monitoraggio quando vengono espressi i voti, questa è chiaramente una proprietà del ballottaggio, non di un giocatore o base particolare.

I confini degli aggregati dipendono principalmente da quanto strettamente accoppiati pensi che i cambiamenti nei voti siano i cambiamenti nei punteggi o negli elenchi di basi. Quanto è importante che l'elettore veda che i punteggi cambiano quando il suo cast (probabilmente non molto, se ci sono anche altri che votano). Quanto è importante che l'elettore veda la nuova base comparire nella sua lista dopo aver votato? Forse alcuni, dal punto di vista del feedback?

In base a ciò che hai scritto qui, la maggior parte delle indicazioni suggerirebbe un aggregato a grana fine, quindi esegui il ballottaggio della radice aggregata e consenti le modifiche all'elenco di base dell'utente e il punteggio di base avvenga in modo indipendente.

    
risposta data 19.06.2018 - 04:43
fonte

Leggi altre domande sui tag