2012-05-19 15 views
7

Devo implementare la logica che recupererà i dati da qualche origine dati remota. E ora ho bisogno di decidere - quale concetto dovrei avere bisogno: Provider, Repository o Service.confrontare repository vs provider vs service

In realtà non capisco molto bene tutta la grande differenza tra quello. Sì, so che il repository è qualcosa di più specifico dei dati e non dovrebbe contenere alcuna logica di business. Il fornitore per l'altra mano può contenere alcune regole aziendali oltre a gestire i dati. Inoltre, il servizio potrebbe contenere alcune logiche di business oltre a gestire i dati. Allora qual è la differenza tra Servizio e Provider.

Dall'altro punto di vista, penso che l'utilizzo del servizio sia un approccio migliore per dimostrare che si tratta di un'astrazione per l'accesso remoto.

In conclusione: tutto questo sembra ragionevole e l'ho completamente confuso. Sarà molto apprezzato se qualcuno mi aiuterà con esso.

+1

http://stackoverflow.com/questions/623090/is-the-repository-pattern-the-same-as-the-asp-net-provider-model –

+0

http://forums.asp.net/t /1649824.aspx?Provider+Model+vs+Repository+Pattern –

risposta

8

Il repository e il servizio non si escludono a vicenda. Infatti, sono spesso usati insieme.

Il livello di servizio si trova sopra gli oggetti del dominio e fornisce un'interfaccia granulare per le operazioni aziendali. Solitamente descrive i casi d'uso della tua applicazione. Il livello di servizio utilizza i repository per ottenere gli oggetti del dominio e delegare loro ulteriore esecuzione laddove possibile.

Il repository funziona come una raccolta di oggetti di dominio persistenti. Fornisce metodi per trovare gli oggetti giusti utilizzando alcuni criteri. Fornisce inoltre metodi per il salvataggio di tali oggetti.

Le implementazioni del repository in natura variano un po '. Repository potrebbero fornire metodi come

List<Person> findPersonByName(String name) 

o un approccio più generico con criteri oggetti

List<Person> find(Criteria criteria) 

Ulteriori lettura: service layer, repository

io non sono a conoscenza con il modello Provider.

0

Tutto questo approccio sembra ragionevole e ho completamente confuso con lo .

Non c'è da stupirsi sei confuso, dal momento che le persone sembrano ricorrere a servizi e fornitori per qualsiasi cosa e il suo contrario in questi giorni;)

Pattern Repository è più precisamente definita però: è un insieme di oggetti dello stesso tipo da cui è possibile eseguire query, aggiungere o rimuovere, apparire come una raccolta in memoria per i chiamanti ma in realtà mappati a una memoria persistente dietro le quinte.

Che dire trovare un nome che descriva realmente ciò che fa l'oggetto piuttosto che l'uso di sacchetti di concetti stracciati? Sono tutto per schemi e idiomi condivisi che sono immediatamente riconoscibili a tutti gli sviluppatori, ma non riesco a vedere l'uso delle parole quando non significano nulla di preciso più ...

0

In parole semplici si dispone del servizio Servizio S che utilizza il repository R per il database CRUD o le operazioni di ricerca. Supponiamo che tu abbia diversi servizi S1, S2, S3 ognuno con gli stessi contratti (Interfaccia) ma diverse implementazioni, hai bisogno di un fornitore che scelga quale utilizzare in quale contesto. È possibile ignorare il modello Provider usando Dependency Injection in modo che il codice è meno accoppiato e direzione non è responsabile per i instanciating i servizi, il cliente sarà istanziare il servizio proprio con DI Container

0

Repository incapsula una logica di dati specifica per ottenere i dati, ad esempio ICustomerRepository, possono avere SqlCustomerRepository, implementazioni MySqlCustomerRepository. Tuttavia, DataProvider astrae la logica dei dati e utilizza mezzi configurati per risolvere i dati. I dati possono provenire da database, file flat o database NoSql. Inoltre, la configurazione di DataProvider può essere modificata all'interno del contesto a differenza di un'implementazione di repository inserita in un servizio. D'altra parte, come Nefron ha spiegato che il servizio opera sulla logica aziendale definita nelle entità.

+0

Che ne dici di operazioni "esterne" generali come la classe "EmailSender"? Quale sarebbe il suo suffisso? Da un lato non è un repository, non è un DataProvider e, d'altra parte, non è una dipendenza da applicazioni interne, quindi, secondo la tua risposta, non possiamo chiamarlo servizio. –

Problemi correlati