Idealmente, come memorizzare i dati in un database, e poi come vi si accede, deve essere derivato dalla natura del rapporto tra le entità di dominio nel modello di dominio. Cioè, il modello relazionale dovrebbe seguire dal modello di dominio. Ad esempio, se hai due entità, ad esempio, Utente e Indirizzo.
Scenario n. 1: gli indirizzi non sono mai accessibili indipendentemente, sono sempre un attributo dell'utente. In questo caso, l'indirizzo è un oggetto valore e l'utente è un'entità e ci sono delle guide su come memorizzare questa relazione. Un modo è quello di memorizzare gli attributi Address of Address accanto agli attributi di User, in una singola tabella. In questo caso, UserDao gestirà entrambi gli oggetti.
Scenario n. 2: l'indirizzo può essere associato a un utente, ma può anche essere separato per conto proprio, un'entità. In questo caso, è necessario un approccio diverso dal primo. Si può avere un DAO separato e una tabella per il tipo di indirizzo.
Il mio punto è, che il più delle volte questa importante idea viene ignorato che Domain Model dovrebbe essere il cuore dell'applicazione, la guida di altri strati.
Ad esempio, se il modello di dominio è definito correttamente e si è ben consapevoli del tipo di entità che si hanno e della relazione tra loro, allora la persistenza (le tabelle relazionali e le loro relazioni, i DAO, ecc.) Si evolveranno come una conseguenza molto logica di ciò che si ha nel modello di dominio.
In altre parole, se si spende un po 'di tempo a studiare il vostro modello, si sarà in grado di tracciare il vostro problema nel determinare come organizzare i tuoi DAO ad un posto nel modello di dominio. Se puoi definire chiaramente il tipo di oggetti e la natura della relazione tra loro nel modello di dominio, ti aiuterà a risolvere il tuo problema nel livello DAL.
"Ho bandito l'acronimo DTO dal mio vocabolario e codice." Puoi spiegare di più? – Casey
Semplicemente non vedo il punto di chiamare un oggetto un 'oggetto di trasferimento dati'. Compilo gli oggetti di dominio direttamente nei miei DAO, li uso nei miei servizi e li espongo nelle mie visualizzazioni (a volte posso creare oggetti di visualizzazione alternativi). Le DTO in genere non hanno alcun comportamento e sono titolari di proprietà stupide. Non vedo una ragione per limitare i miei oggetti in una moderna architettura di progetto Java. E per moderno, generalmente intendo non-EJB, con un framework come Spring. – pkananen
Capisco. Praticamente nello stesso modo in cui li uso.Grazie. – Casey