2009-03-24 10 views
43

Non ho davvero visto alcun esempio, ma presumo che siano salvati all'interno della tabella di entità contenente all'interno del database.Come vengono memorizzati gli oggetti valore nel database?

Ie. Se ho un'entità Persona/radice aggregata e una tabella Persona corrispondente, se avesse un Oggetto Valore chiamato Indirizzo, i valori dell'indirizzo verrebbero salvati all'interno di questa tabella Persona!

Questo ha senso per un dominio in cui ho altre entità come le aziende ecc. Che hanno un indirizzo?

(Attualmente sto scrivendo un'applicazione per la gestione del progetto e cercando di entrare in DDD)

risposta

84

E 'ok per memorizzare oggetti di valore in una tabella separata, per le ragioni stesse che hai descritto. Tuttavia, penso che stai fraintendendo Entities vs VOs - non è una preoccupazione relativa alla persistenza.

Ecco un esempio:

Si supponga che una società e persona entrambi hanno la stessa mail Indirizzo . Quale di queste affermazioni considera valida?

  1. "Se modifico Company.Address, voglio Person.Address per ottenere automaticamente quei cambiamenti"
  2. "Se modifico Company.Address, si deve non influisce Person.Address"

Se è vero, Indirizzo dovrebbe essere un Entity, ed ha quindi è o wn tavolo

Se è vero, Indirizzo dovrebbe essere un valore dell'oggetto. Potrebbe essere memorizzato come componente all'interno della tabella Entity padre o potrebbe avere la sua tabella (migliore normalizzazione del database).

Come si può vedere, la persistenza dell'indirizzo non ha nulla a che fare con la semantica Entity/VO.

7

La maggior parte degli sviluppatori tende a pensare nel database prima di ogni altra cosa. DDD non sa come viene gestita la persistenza. Questo dipende dal repository per affrontarlo. Puoi mantenerlo come xml, sql, file di testo, ecc. Ecc. Entità/aggregati/oggetti valore sono concetti relativi al dominio.

La spiegazione di Vijay Patel è perfetta.

2

Ho iniziato a imparare DDD con il libro di Eric Evans e l'eccellente progetto dddsample Cargo come esempio. http://dddsample.sourceforge.net/

Così, per chi (come me) che vuole dare contenuti concreti alla differenza di implementazione del codice di questa sfumatura nello strato Domain Model, direi:

Il metodo overidded Equals o/e sameIdentityAs/SameValueAs (dall'interfaccia Entity e ValueObject) sono, penso, il luogo della loro espressione.

E 'solo la mia Feelin' :)

Penso interessante leggere anche questo:

http://martinfowler.com/bliki/ValueObject.html

Problemi correlati