Stiamo usando il modello di repository giusto?

14

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:

  1. 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 da vacancyrespository , oppure entrambi i repository restituiscono risultati e c'è una classe più alta nella gerarchia (chiamiamola a dataservice ) che ottiene i risultati da entrambi i repository e li combina in 1 risultato ?

  2. 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 (chiamiamola dataservice )?

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.

    
posta Michel 22.01.2013 - 09:02
fonte

1 risposta

14

Repository restituisce oggetti di dominio ed è costruito sopra i livelli di mappatura. Per un dominio di dominio molto semplice, gli oggetti e le tabelle del database possono essere molto simili.

Se il repository restituisce sempre la rappresentazione esatta della struttura dei dati, potrebbe essere Table Data Gateway ovvero Accesso ai dati Object (DAO).

Esempio: Il tuo database ha tabelle per persona e indirizzo. Nel tuo indirizzo di dominio dell'applicazione non è un'entità di sua proprietà, è solo una proprietà di Persona. In questo caso non avresti PersonRepository e AddressRepository. Hai solo PersonRepository. Il dominio non dovrebbe preoccuparsi del modo in cui i dati del dominio vengono mantenuti. Queste responsabilità sono in un livello dietro il repository.

Dal tuo esempio sembrerebbe che tu abbia effettivamente DAO e li abbia appena nominati Repository.

    
risposta data 22.01.2013 - 09:22
fonte

Leggi altre domande sui tag