Valore unico oggetto contro entità

8

Cercando di convertire alcune entità in oggetti valore sono bloccato in un caso in cui ciò che sembra un oggetto valore deve essere univoco all'interno di un aggregato.

Supponiamo di avere un'entità Film che costituisce la radice di un aggregato. Questa entità Film è correlata ad alcuni set di oggetti AdvertisementEvent con il ruolo di visualizzare un annuncio pubblicitario ad un determinato timestamp.

AdvertisementEvent contiene un link ad alcuni Banner che devono essere visualizzati, le coordinate e alcuni filtri di effetti.

Poiché AdvertisementEvent è solo una raccolta di parametri di configurazione non sono sicuro se dovrei preoccuparmi della sua identità e trattarla come un semplice oggetto di valore elevato. Tuttavia, mi interessa che all'interno di un film ci sia solo un AdvertisementEvent a un determinato timestamp, probabilmente anche intorno a i timestamp.

Trovo difficile dividere i miei dubbi in più domande indipendenti, quindi eccoli:

  1. Una collezione di parametri di configurazione suona come un oggetto valore?
  2. Sto mescolando il concetto di unicità di AdvertisementEvent in Movie e la regola di integrità della transazione?
  3. qualsiasi delle scelte nel punto (2) implica che AdvertisementEvent deve essere un membro dell'aggregato creato da Film ?
  4. Il mio oggetto AdvertisementEvent è un'entità, un oggetto valore o un oggetto evento? (Ho usato il suffisso Event nel nome per evidenziare la mia confusione)
  5. Gli oggetti di grande valore come questo sono un odore di design?

Immagino di non aver a che fare con un evento nel senso di DDD perché non è qualcosa che solo succede . Il vero evento DDD dovrebbe essere qualcosa di più come AdvertisementEventReached

    
posta SystematicFrank 03.05.2013 - 12:06
fonte

1 risposta

9

La distinzione tra oggetto Entità e Valore dovrebbe essere basata sulla domanda: se ho due oggetti con lo stesso contenuto (due AdvertisementEvents che collegano allo stesso Banner con il stessi parametri), dovrei trattarli in modo diverso o uno può essere sostituito dall'altro senza influenzare il funzionamento del software?

In questo caso, direi che puoi sostituire un AdvertisementEvent da un altro con gli stessi valori senza influire sul funzionamento del software. Questo li rende oggetti Valore (il valore contenuto è ciò che conta, non l'identità dell'oggetto stesso).

Per quanto riguarda la dimensione di un oggetto Value: purché contenga un insieme coerente di parametri per una singola responsabilità, non vi è alcun limite su quanto grande possa essere un oggetto Value. Nell'implementazione potrebbe essere utile prestare particolare attenzione agli oggetti di grande valore per garantire che non siano copiati inutilmente ed eccessivamente, ma altrimenti non è un problema.

Per quanto riguarda i vincoli sul numero di AdvertisementEvents che hai in un film , questo è un vincolo sulla relazione tra un film e la sua raccolta di AdvertisementEvents , non su una di quelle classi individualmente. Pertanto, il punto più logico per applicare il vincolo è nel punto in cui la raccolta viene mantenuta in Movie (quindi nel metodo in cui si tenta di aggiungere un AdvertisementEvent ).

    
risposta data 03.05.2013 - 12:46
fonte

Leggi altre domande sui tag