Domanda

Non ho davvero visto alcun esempio, ma suppongo che essi vengono salvati all'interno della tabella di entità che contiene all'interno del database.

Ie. Se ho un'entità Person / root di aggregazione e un corrispondente tabella di una persona, se avesse un oggetto di valore chiamato Indirizzo, i valori di indirizzo sarebbe salvato all'interno di questa tabella Person!

Ha senso per un dominio dove ho altri enti come le società ecc, che hanno un indirizzo?

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

È stato utile?

Soluzione

E 'ok per memorizzare oggetti di valore in una tabella separata, per le ragioni stesse che hai descritto. Tuttavia, penso che stai incomprensione Enti vs VO - non è un problema correlato persistenza

.

Ecco un esempio:

Si supponga che un società e persona hanno entrambi la stessa mail Indirizzo . Quale di queste affermazioni fanno considerano valide?

  1. "Se modifico Company.Address, voglio Person.Address per ottenere automaticamente questi cambiamenti "
  2. "Se modifico Company.Address, si non devono incidere Person.Address "

Se 1 è vero, Indirizzo dovrebbe essere un Ente , e quindi ha il proprio tavolo

Se 2 è vero, Indirizzo dovrebbe essere un Valore oggetto . Potrebbe essere memorizzato come un componente all'interno tavolo della controllante, o potrebbe avere un proprio tavolo (meglio normalizzazione dei database).

Come si può vedere, come indirizzo viene mantenuto non ha nulla a che fare con la semantica Entità / VO.

Altri suggerimenti

La maggior parte dei sviluppatori tendono a pensare nel database prima di ogni altra cosa. DDD non sa su come la persistenza viene gestito. Cioè fino al repository a che fare con questo. Si può persistere come un XML, SQL, file di testo, ecc ecc Enti / aggregati / oggetti di valore sono concetti relativi al dominio.

Spiegazione da Vijay Patel è perfetto.

ho iniziato a imparare DDD con Eric Evans libro e il progetto eccellente dddsample Cargo esempio. http://dddsample.sourceforge.net/

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

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

E 'solo la mia Feelin':)

Credo interessante leggere anche questo:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top