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
customerrepositoryutilizzare 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.