Stiamo utilizzando un gruppo di classi separate con suffisso -repository
per recuperare i dati dal database; per ogni tabella il proprio repository.
Abbiamo ad esempio una classe customerrepository
che ha tutti i tipi di metodi per recuperare i clienti e una vacancyrepository
che ha tutti i tipi di metodi per recuperare i posti vacanti.
Ho due domande su questo modo di fare le cose:
-
Che ne dici di ottenere dati che si estendono su più tabelle? Ad esempio, ho uno schermo che mostra tutti i clienti che non hanno ancora creato un posto vacante. Può un
customerrepository
utilizzare metodi davacancyrespository
, oppure entrambi i repository restituiscono risultati e c'è una classe più alta nella gerarchia (chiamiamola adataservice
) che ottiene i risultati da entrambi i repository e li combina in 1 risultato ? -
quanta logica può gestire un repository di questo tipo?
Penso che sia corretto implementare 'where active == true' in un repository per recuperare solo i record attivi, o anche che la semplice logica sia gestita da una classe più alta nella gerarchia (chiamiamoladataservice
)?
L'esempio a cui stavo ora imbattendo è questo:
Abbiamo un elenco di domande, che contiene una o più domande.
La domanda può avere un risultato, che è in attesa in una tabella separata.
Quindi, quando vuoi recuperare il risultato totale dell'elenco delle domande, devi combinare i dati dalla tabella questionlist
, dalla tabella delle domande e dalla tabella questionstatus
.
Al momento abbiamo 3 diversi repository per queste tabelle.
Se chiedessi a questionlistrepository
quale sia il risultato totale per il numero di elenco 12, sarebbe necessario ottenere i dati da altri due repository e quindi avere un po 'di logica in esso, è permesso?
O c'è un questionlistdataservice
che sa quali repository usare?
Un'altra cosa: i nostri repository possono generare un IQueryable
in modo che un servizio di chiamata possa facilmente combinare i risultati, ma quando non è così, non penso che sia una buona idea recuperare tutto il contenuto di tutte e tre le tabelle dal database.