Tengo dificultades para entender cómo consultar mejor un repositorio.repositorios y consultas con sql en bruto?
Los tres factores que me están tirando a través de un bucle en este momento son: Tipo de
- Retorno de los datos
- Columnas para ejecutar la consulta en
- Número de registros para volver
Punto 1
En lo que respecta a la búsqueda ion one:
Tengo repositorios con muchos métodos que devuelven una combinación de Entidades y valores escalares. Esto parece conducir a la "explosión de método". ¿Debo devolver siempre un objeto Entity? ¿Cómo debo consultar los objetos donde solo necesito una columna?
Punto 2 Al ejecutar una consulta, ¿debo incluir todas las columnas en la tabla, incluso si solo necesito una, o dos columnas? Si creo consultas específicas para esto conduce a más métodos en el Repositorio
Punto 3 ¿Cómo debería proporcionar las condiciones para la consulta? Leí sobre Especificaciones, pero entiendo que recorre los registros devueltos y filtra los que pasan a una nueva colección. Esto no parece una buena idea para el rendimiento. Ahora mismo solo hago un método nuevo en Repo como getNameById() que encapsula la condición.
Por favor, no es que no estoy usando un ORM, solo tengo raw sql en mis repositorios.
actualización
Punto 1: Sobre la base de las respuestas y un poco más investigación sería esto una buena implementación?
Ahora tengo un gran repositorio que devuelve una mezcla de objetos de tipo escalar y entidad (la misma entidad). Estoy pensando que podría reducirlo mucho si solo utilizo un método GetUser (userId) y olvido los métodos de escritura que solo devuelven valores de columna individual.
Por ejemplo, si necesito devolver un nombre de usuario, podría llamar al método GetUser (userId) que hidrata el objeto User y luego en la capa de servicio simplemente filtrarlo al nombre de usuario.
Otra forma sería utilizar algún tipo de clase QueryBuilder que podría pasar al Repositorio que podría ser analizado para generar el sql adecuado.
Punto 2
Mirando hacia atrás esto es bastante similar al punto uno y mi solución actual sería que la puede llevar todos los campos de la tabla. Es una compensación entre el rendimiento y la capacidad de mantenimiento.
Punto 3
que tendría que proporcionar algún tipo de cláusula where. No estoy seguro si esto tiene sentido al hacer una especificación o solo una cadena sql. Mi solución actual es hacer nuevos métodos para estos tipos, pero me gustaría algo más genérico para el Repositorio
En general, sigo investigando sobre esto ... Me encantaría escuchar más información sobre esto o enlaces a libros o referencias que tipo de atar todo esto juntos.
¿Crees el comando Sql dinámicamente en tu clase? – Arian
SQL sin procesar y sin ORM, ¿ja? Como vivir al límite, ¿verdad? En serio, ¿por qué quieres tratar con raw sql? –
@yves - pasos de bebé :) – chobo