El patrón de puerta de enlace se refiere a proporcionar un único punto de acceso para un sistema o subsistema. El patrón DAO es un tipo específico de puerta de enlace: proporciona el único medio para obtener un tipo particular de datos del almacén de datos.
Voy a responder a las preguntas directamente, aquí y ampliar las respuestas a continuación.
1. Qué suposiciones son correctas. El patten DAO se ocupa de ocultar los detalles de captar entidades y consultas sobre entidades. Devolver un conjunto de registros que esté directamente relacionado con el mecanismo de persistencia generalmente no es una buena idea ya que rompe la abstracción. Al mantener el almacenamiento independiente de DAO, las pruebas son mucho más sencillas; es posible simular una interfaz DAO utilizando, por ejemplo, una implementación simple en memoria basada en datos de prueba almacenados en colecciones.
2. ¿Qué debe ser el tipo de retorno para un DAO (es decir getContact() - para un registro) El tipo de retorno debe ser Contact
frijol. A medida que agrega atributos al contacto, solo la clase de contacto debe cambiar: la interfaz DAO permanece igual.
3. ¿Debería getContacts() (para múltiples registros) estar incluso en el DAO? Si es así, ¿qué es el retornado? Puse métodos de consulta junto con otros métodos DAO - Realmente no veo una distinción. Se pueden devolver múltiples contactos como una Lista o Colección apropiada de Contact
frijoles.
El debate sobre la devolución de objetos o solo los valores necesarios es uno de diseño y rendimiento extensibles. La opción predeterminada debería ser devolver Beans. La mayoría de los mapeadores ORM e incluso las capas de acceso JDBC hacen que la creación de objetos sea relativamente liviana (las JVM modernas pueden crear un nuevo objeto en menos de 10 instrucciones de CPU) y es la mejor opción de diseño y evolucionará fácilmente.
La devolución de resultados no objeto, como una lista de ID de cliente, es una posibilidad, pero debe tomarse cuando haya pruebas claras de que es necesario. El rendimiento suele ser el factor motivador, por lo que el diseño debe respaldarse con pruebas de perfil. De lo contrario, es probable que sacrifique un buen diseño a favor de una optimización prematura. Ampliar un diseño que devuelve datos no objeto puede ser difícil; digamos que ahora quiere devolver la identificación del cliente y la fecha del último pedido. Si está devolviendo datos como filas y tipos primitivos, la forma del tipo de retorno va a cambiar, lo que normalmente requiere que cambien los métodos en la interfaz DAO y la implementación, y todos los clientes que los utilizan. Con un bean, los datos relacionados pueden obtenerse sin cambiar la forma de los datos, suponiendo que los datos relacionados están disponibles a partir del bean que ya se está devolviendo.
Los granos no necesitan estar completamente rellenos. Los mapeadores de ORM tienden a buscar de forma perezosa objetos y colecciones relacionados, por lo que se toma el rendimiento por lo que se recupera.
En resumen, si bien es posible tener una combinación de métodos que devuelven resultados de frijol y sin frijol, me alejaría de los resultados que no son de frijol a menos que haya una razón convincente para hacerlo. Y hágalo consciente de los problemas de mantenimiento que esto puede causar.
Una gran respuesta, esto realmente me hizo ver la cosa de otra manera, y me hizo pensar que tal vez a veces me preocupe demasiado por la optimización prematura. Sin embargo, sigo siendo un poco escéptico sobre la carga lenta, y cómo afecta el uso de la memoria en general. Muchas gracias –