DDD: Gli oggetti immutabili possono anche essere entità?


9

Ho letto innumerevoli post sulle differenze tra Entità e oggetti Value e mentre penso che almeno concettualmente capisco come le due differiscono, sembra che in alcuni di questi post gli autori considerino un particolare concetto di dominio come un VO semplicemente perché è immutabile (quindi il suo stato non cambierà mai, almeno all'interno di quel particolare modello di dominio).

Sei d'accordo sul fatto che se lo stato di un oggetto non cambierà mai all'interno di un particolare modello di dominio, questo oggetto non dovrebbe mai essere un'entità? Perché?


Devo imparare un po 'di DDD in modo da poter rispondere in modo intelligente ad alcune di queste domande. Ho il sospetto che la difficoltà che molti sviluppatori di software incontrano con concetti semplici come questo deriva dall'idea errata che DDD sia una metodologia di programmazione.
Robert Harvey,

Risposte:


4

Seguendo il libro (Evans, 2004), "Un oggetto definito principalmente dalla sua identità è chiamato ENTITÀ". Questa definizione è indipendente dal fatto che l'oggetto sia mutabile o immutabile. Penso che sia molto meno probabile che un oggetto immutabile sia un'entità in un determinato dominio, quindi è un'euristica utile per decidere se un oggetto è un "oggetto valore" o un "entità", ma non fa parte della definizione.

Ad esempio, supponiamo che tu abbia un'entità che rappresenta un dipendente, che può avere o meno un supervisore diretto. Se si decide di rappresentare l'idea di non avere un supervisore diretto come riferimento a un oggetto supervisore "null", l'oggetto supervisore "null" viene ragionevolmente considerato un'entità. E probabilmente potresti rendere immutabile questo oggetto "null".


1
+1 Il gestore può essere di sola lettura (immutabile) in un determinato contesto o sottodominio, ma ciò non significa che non abbia identità.
Adrian Schneider,

Perdonami per essere denso, ma non capisco completamente il tuo esempio di supervisore. Stai dicendo che nel dominio avremmo due concetti relativi al supervisore? Un concetto rappresenterebbe i supervisori che hanno dipendenti che supervisionano (nel codice questo concetto verrebbe implementato come classe Supervisore mutabile) mentre l'altro concetto descriverebbe un supervisore che non supervisiona nessun dipendente (e questo concetto verrebbe implementato come null nel codice) ?
bckpwrld,

@bckpwrld No, sicuramente intende un oggetto nullo .
maaartinus,

2

Il modo in cui l'ho letto è che un oggetto valore è un oggetto che non ha un'identità in sé e che non ha nulla a che fare con il suo stato che cambia o non cambia. Questo fa la differenza tra un'entità e un oggetto valore che un'entità ha una chiave primaria, mentre un oggetto valore non lo fa; avrà una chiave esterna per l'entità a cui appartiene.

http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/

Posso ancora cambiare le proprietà dell'oggetto valore, ma non deve mai essere identificato indipendentemente dalla sua entità.


Ho mescolato la terminologia dai database relazionali (chiave primaria) come identità come metafora, per favore non prenderla alla lettera
Kevin

Per quanto ne so, anche se nel codice i VO sono rappresentati con un tipo mutabile (quindi le istanze di questo tipo possono avere le loro proprietà modificate), concettualmente questi VO sono ancora immutabili. Pertanto, la modifica di una proprietà di un'istanza che rappresenta un VO particolare significa che ora questa stessa istanza rappresenta un VO diverso. In altre parole, i VO sono concettualmente sempre immutabili
bckpwrld
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.