Diciamo che ho due entità Utente e Oggetto. L'unico comportamento nel dominio tra queste due entità è che un utente può apprezzare un oggetto. Poiché non vi è alcuna restrizione sul numero di elementi che un utente può piacere, questa relazione molti-a-molti può essere grande.Progettazione basata su domini: come modellare le relazioni che sono grandi ma con pochi comportamenti
Non credo che sia ragionevole per le prestazioni avere un utente che contenga un elenco di elementi che hanno gradito nel suo modello o viceversa, dal momento che dovrò caricare una raccolta di oggetti potenzialmente ampia per aggiungi solo un elemento. Dal punto di vista della progettazione del dominio, non ha senso per me avere entrambe le entità riferimento all'altra nei loro campi, poiché nessun comportamento richiede la presenza di una raccolta di elementi o utenti.
Ho bisogno di mantenere questa relazione come l'interfaccia utente deve visualizzare un elenco di elementi che un utente è piaciuto e un elenco di utenti che è piaciuto un elemento. Il requisito può essere fornito da un modello di lettura, ma ho ancora bisogno di un concetto di dominio per acquisire questa relazione in modo che possa essere mantenuta.
Un modo che posso venire è quello di introdurre un tipo di relazione di aggregato, ad esempio UserLikeItem, e avere il metodo user.like (item) restituire un'istanza di UserLikeItem che posso quindi utilizzare UserLikeItemRepository per persistere.
È una soluzione valida? Qual è il modo naturale in DDD per modellare questo tipo di relazioni grandi ma non comportamentali?
Mi piace (gioco di parole!) La soluzione, anche se non deve essere un metodo su IMO utente. Permette anche di acquisire informazioni aggiuntive come il tempo in cui l'oggetto è stato apprezzato, in quale contesto, ecc. Lo stesso AR può essere usato anche per il contrario, ma forse è necessario trovare un nome migliore per esso. – guillaume31
Sono d'accordo, l'unica cosa che probabilmente aggiungerei è un 'LikeCounter' per l'oggetto, in modo da poter visualizzare il totale come il conteggio di un oggetto senza dover colpire l'origine dati' UseLikeItem'. –
Un oggetto di transazione o un evento di dominio "UserLikedItem" sembra appropriato con quel poco che ci hai dato per andare avanti. –