2010-02-16 21 views
9

Poiché non vi sono respository per oggetti valore. Come posso caricare tutti gli oggetti valore?Come vengono salvati e caricati gli oggetti valore?

Supponiamo che stiamo modellando un'applicazione blog e abbiamo questa classi:

  • Post (entità)
  • Commento (oggetto Value)
  • Tag (oggetto Value)
  • PostsRespository (Respository

I So che quando salvi un nuovo post, i relativi tag vengono salvati con esso nella stessa tabella. Ma come posso caricare tutti i tag di tutti i post. È necessario che PostsRespository disponga di un metodo per caricare tutti i tag? Io di solito lo faccio, ma voglio conoscere altre opinioni

risposta

8

Sto cercando una soluzione migliore per questa domanda e ho trovato questo post:

http://gojko.net/2009/09/30/ddd-and-relational-databases-the-value-object-dilemma/

Questo post spiega molto bene perché c'è un sacco di confusione con oggetti di valore e database. Qui siete frase che mi è piaciuto più di tanto: "persistenza non è una scusa per trasformare tutto a enti"

Gojko Adzic, ci danno tre alternative per salvare i nostri oggetti di valore .

+0

I database relazionali e le ORM ci ingannano spesso nella creazione di entità accidentali http://www.jefclaes.be/2013/05/accidental-entities-you-dont-need-that.html – JefClaes

+0

grazie per il collegamento – yeraycaballero

+0

@yeraycaballero Se salvi valore oggetto in una colonna di testo (opzione 3), come devo fare per eseguire un aggiornamento atomico sull'oggetto valore? –

3

Attualmente sto lavorando attraverso un esempio simile. Una volta che hai bisogno di riferirti in modo univoco ai tag, non sono oggetti a lungo valore semplice e possono continuare a crescere in complessità. Ho deciso di renderli loro entità e creare un repository separato per recuperarli. Nella maggior parte degli scenari vengono caricati o salvati con il post ma quando sono richiesti da soli viene utilizzato l'altro repository.

Spero che questo aiuti.

MODIFICA: In parte grazie a questo post ho deciso di ristrutturare leggermente la mia domanda. Hai ragione che probabilmente stavo tagliando in modo errato un'entità. Da allora ho cambiato la mia applicazione in modo che i tag siano solo stringhe e il repository post gestisca tutti i requisiti di archiviazione relativi ai tag. Per le operazioni che richiedono post, i tag vengono caricati con loro. Per qualsiasi operazione che richiede solo tag o elenchi di tag, il repository ha metodi per questo.

+0

Grazie per la risposta. Quindi hai un TagRepository. Hai una tabella Tag anche nel database? – yeraycaballero

+0

In realtà non ho ancora deciso il database. Probabilmente non avrò un database separato e sto considerando seriamente una soluzione per database di oggetti o documenti come mongo o couch. – smaclell

0

Ecco la mia opinione su come risolvere questo tipo di problema nel modo in cui sto attualmente praticando DDD.

Se si modifica qualcosa che richiede l'aggiunta e la rimozione di tag come Post, i tag possono essere entità ma potrebbero essere oggetti valore e vengono caricati e salvati insieme al post in entrambi i casi. Personalmente tendo a privilegiare gli oggetti valore a meno che l'oggetto non debba essere modificato, ma mi rendo conto che esiste una differenza tra oggetti entità modellati come "istantanee" di sola lettura e oggetti a valore reale privi di identità. La parte difficile è che forse a volte ciò che normalmente penseresti come una chiave potrebbe essere parte di un oggetto valore purché non venga utilizzato come identità in quel contesto e penso che i tag rientrino in questa categoria.

Se si modificano i tag stessi, si tratta probabilmente di un contesto separato separato o almeno di un aggregato separato in cui i tag stessi sono la radice aggregata e persistono attraverso un repository. Si noti che la classe di entità che rappresenta i tag in questo contesto non deve essere la stessa classe di entità per i tag utilizzati in Posta aggregata.

Se i tag disponibili sull'elenco sono disponibili solo a scopo di lettura, in modo da fornire un elenco di selezione, è probabile che sia un elenco di oggetti valore. Questi oggetti valore possono ma non devono essere nel modello di dominio poiché riguardano principalmente l'interfaccia utente e non il dominio effettivo.

Per favore, interpella se qualcuno ha qualche idea sul perché la mia interpretazione di questo potrebbe essere sbagliata, ma questo è il modo in cui l'ho fatto.