2010-03-09 12 views
5

È meglio incapsulare la connessione all'interno di un DAO, ovvero avere il DAO creare o recuperare la connessione e quindi chiudere, oppure è meglio passare la connessione nel DAO e gestire i dettagli nel codice esterno al DAO?Devo passare o incapsulare una connessione in un DAO?

Follow-up: come si gestiscono le connessioni di chiusura se si incapsula la connessione all'interno del DAO?

risposta

3

Il DAO dovrebbe eseguire operazioni CRUD e nascondere quelle operazioni dai chiamanti. Quindi dovresti incapsulare la connessione.

D'altra parte, se i livelli superiori coordinano i DAO (ad esempio le transazioni), è anche possibile passare la connessione nei DAO (e chiuderla allo stesso livello in cui è stata aperta, non nei DAO).

La linea di fondo è ... dipende in realtà dalla responsabilità che ogni livello della tua applicazione ha. I chiamanti dovrebbero sapere dove i DAO stanno recuperando i dati o no? In caso contrario, incapsulare le connessioni.

+0

Stavo pensando di creare una fabbrica e di chiamarla DAO, che è essenzialmente incapsulamento. –

+0

Gli stabilimenti DAO sono utilizzati per produrre DAO concreti (implementazioni). Non sono sicuro di capire cosa intendi con "creare una fabbrica e chiamare DAO"! –

+0

Scusa, intendevo una fabbrica di connessione, non una fabbrica DAO. –

2

Provenendo da un punto di vista dell'usabilità e degli standard, penso che si desideri che il DAO si occupi delle connessioni. Dopotutto è una funzione principale dell'accesso ai dati.

Considerate il vostro utilizzo, vorreste che il codice del livello aziendale/di presentazione che utilizza il DAO conosca abbastanza del database per creare una connessione da passare al DAO? Che cosa succede se è necessario spostare il database o rinominarlo, a quel punto è molto bello avere le connessioni incapsulate.

L'utilizzo di un DAO che gestisce le proprie connessioni consente anche un uso più terso degli oggetti nel codice chiamante, aumentando la leggibilità complessiva, IMO.

0

Penso che il punto chiave di un DAO è che è possibile sostituire l'implementazione senza che il resto dell'applicazione sappia o si prenda cura di esso. L'ho fatto davvero su un progetto. L'interfaccia DAO rimane la stessa, ma i dettagli della connessione cambiano in modo che NON POSSIA visualizzarlo esternamente.

Problemi correlati