2010-03-09 20 views
5

¿Es mejor encapsular la conexión dentro de un DAO, es decir, hacer que el DAO cree o recuperar la conexión y luego cerrar, o es mejor pasar la conexión al DAO y manejar los detalles en el código externo al DAO?¿Debo pasar o encapsular una conexión en un DAO?

Seguimiento: ¿Cómo maneja las conexiones de cierre si encapsula la conexión dentro de DAO?

Respuesta

3

El DAO debe hacer operaciones CRUD y ocultar esas operaciones de las personas que llaman. Entonces debes encapsular la conexión.

Por otro lado, si los niveles superiores coordinan los DAO (por ejemplo, transacciones), también podría pasar la conexión a los DAO (y cerrarla en el mismo nivel que la abrió, no en los DAO).

La línea inferior es ... realmente depende de la responsabilidad que tiene cada capa de su aplicación. ¿Deberían las personas que llaman saber dónde están los DAO recuperando los datos o no? Si no, entonces encapsula las conexiones.

+0

Estaba pensando en crear una fábrica y tener la llamada DAO, que es esencialmente encapsulación. –

+0

Las fábricas DAO se utilizan para producir DAO concretos (implementaciones). No estoy seguro de entender lo que quiere decir con "crear una fábrica y tener la llamada DAO que"! –

+0

Lo siento, quise decir una fábrica de conexión, no una fábrica de DAO. –

2

Si hablamos de esto desde el punto de vista de la usabilidad y los estándares, creo que quiere que el DAO se encargue de las conexiones. Esa es, después de todo, una función principal del acceso a los datos.

Considere su uso, ¿le gustaría que el código de la capa de presentación/negocio que utiliza el DAO sepa lo suficiente sobre la base de datos para crear una conexión para pasar al DAO? Qué sucede si necesita mover la base de datos o cambiarle el nombre, en ese punto es muy bueno tener las conexiones encapsuladas.

El uso de un DAO que gestiona sus propias conexiones también permite un uso más brusco de los objetos en el código de llamada, lo que aumenta la legibilidad general, IMO.

0

Creo que el punto clave de un DAO es que puede cambiar la implementación sin que el resto de la aplicación lo sepa o le importe. De hecho, he hecho esto en un proyecto. La interfaz DAO sigue siendo la misma, pero los detalles de conexión cambian, por lo que NO PUEDE tenerlos visibles externamente.

Cuestiones relacionadas