2013-01-16 8 views
69

1) Perché utilizziamo DTO e DAO e quando dovremmo utilizzarli. Sto sviluppando un software Java GUI che si occupa di inserire, modificare, cancellare dati. Ma sto lottando per distinguere tra DTO/DAO e Model, View, Controller (MVC) Struttura? Sono simili, che è meglio usare quando si interagisce con il database attraverso Java GUI.Concetti DTO e DAO e MVC

2) Una cosa di cui sono davvero curioso è se sia una buona pratica avere view e Controller in una classe. Se pensiamo a Netbeans, puoi creare la classe di fotogrammi GUI e aggiungere componenti come JButton al frame, fare doppio clic sul pulsante per accedere al metodo actionListener (Controller) che sembra essere nel frame i dati devono essere mostrati al utente (Visualizza). Quindi sono nella stessa classe. È completamente contrario al concetto o no?

<a href="http://www.youtube.com/watch?v=Iwwznm9XSME">Here is what Im talking about</a> 

cattive pratiche per avere vista e controller in una classe?

+0

Dove si utilizza DTO? –

+0

@RomanC ha una tabella di database che contiene gli eventi (eventId, name, date.etc), quindi DTO e MVC, uguali o diversi? – Hoody

+0

Nel database non hai DTO ma oggetti di database. –

risposta

153

DTO è un'abbreviazione per Data Transfer Object, quindi viene utilizzato per trasferire i dati tra classi e moduli dell'applicazione. DTO dovrebbe contenere solo campi privati ​​per i tuoi dati, getter, setter e costruttori. Non è consigliabile aggiungere metodi di business logic a tali classi, ma è opportuno aggiungere alcuni metodi utili.

DAO è un'abbreviazione per Data Access Object, quindi dovrebbe incapsulare la logica per il recupero, il salvataggio e l'aggiornamento dei dati nell'archivio dati (un database, un file system, qualunque). Ecco un esempio di come le interfacce DAO e DTO sarebbe simile:

interface PersonDTO { 
    String getName(); 
    void setName(String name); 
    //..... 
} 

interface PersonDAO { 
    PersonDTO findById(long id); 
    void save(PersonDTO person); 
    //..... 
} 

Il MVC è un modello più ampio. Il DTO/DAO sarebbe il tuo modello nel modello MVC. Ti spiega come organizzare l'intera applicazione, non solo la parte responsabile del recupero dei dati.

Per quanto riguarda la seconda domanda, se si dispone di una piccola applicazione è completamente OK, tuttavia se si desidera seguire lo schema MVC sarebbe meglio disporre di un controller separato, che conterrebbe la logica di business per il frame in una classe separata e invia messaggi a questo controller dai gestori di eventi. Ciò separerebbe la tua logica aziendale dalla vista.

+0

La prima domanda riguardava la differenza tra DTO/DAO e MVC, penso. – madth3

+0

Probabilmente ho capito male la domanda. – Petr

+0

Se volessi aggiungere trigger per abilitare/disabilitare qualcosa come "PersonDAO.save()", lo inserirò direttamente nel metodo 'save()'?Inoltre, per i contatori delle prestazioni del database, aggiungerei timer direttamente al metodo 'save()'? Inoltre, è accettabile avere un riferimento PersonDAO all'interno di PersonDTO? – BenR