Sto cercando di capire come interrogare al meglio un repository.e query con sql raw?
I tre fattori che mi stanno gettando attraverso un ciclo in questo momento sono: Tipo
- ritorno dei dati
- Colonne per eseguire query
- Numero di record per tornare
Punto 1
Per quanto riguarda la ricerca uno:
Ho repository con molti metodi che restituiscono una combinazione di entrambe le entità e valori scalari. Questo sembra portare a "esplosione di metodo". Devo sempre restituire un oggetto Entity? Come dovrei richiedere oggetti per i quali ho solo bisogno di una colonna?
Point 2 Quando si esegue una query dovrei includere ogni colonna della tabella, anche se solo ho bisogno di uno, o due colonne? Se creo query specifiche per questo si porta a più metodi nella repository
punto 3 Come devo fornire le condizioni per la query? Ho letto delle specifiche, ma la mia comprensione è che si collegano i record restituiti e si filtrano quelli che passano in una nuova raccolta. Questo non sembra una buona idea per quanto riguarda le prestazioni. In questo momento ho appena creato un nuovo metodo nel Repo come getNameById() che incapsula la condizione.
Per favore non che io non stia usando un ORM, ho solo raw sql nei miei repository.
Aggiornamento
Punto 1: Sulla base delle risposte e un po 'più ricerca questo sarebbe una buona implementazione?
In questo momento ho un repository di grandi dimensioni che restituisce un mix di oggetti di tipo scalare ed entità (la stessa entità). Sto pensando di poterlo ridurre notevolmente se uso solo un metodo GetUser (userId) e dimentico di scrivere metodi che restituiscono solo valori di colonna singola.
Ad esempio, se è necessario restituire un nome utente, è possibile chiamare il metodo GetUser (userId) che idrata l'oggetto Utente e quindi nel livello di servizio lo si limita a filtrarlo nel nome utente.
Un altro modo sarebbe utilizzare una classe di QueryBuilder che potrei passare nel Repository che potrebbe essere analizzata per generare il corretto sql.
Point 2
Guardando indietro questo è abbastanza simile al punto uno e la mia soluzione attuale sarebbe quello di prendere solo tutti i campi della tabella. È un compromesso tra prestazioni e manutenibilità.
punto 3
avrei bisogno di fornire una sorta di clausola where. Non sono sicuro se questo abbia senso farlo tramite specifica o solo una stringa sql. La mia soluzione attuale è di creare nuovi metodi per questi tipi, ma vorrei qualcosa di più generico per il repository
Nel complesso, continuando a cercare in questo ... Mi piacerebbe sentire più input in questo o collegamenti a libri o riferimenti che legano tutto questo insieme.
Si crea dinamicamente il comando Sql nella classe? – Arian
SQL grezzo e nessun ORM, ha? Come vivere ai margini, vero? Seriamente, perché vuoi gestire raw sql? –
@ yves - baby steps :) – chobo