2011-01-22 12 views
5

Sembra che ci siano molti modi per applicare i pattern del repository, ecco perché ho bisogno del tuo parere e una buona risposta chiara su quello che sembra il modo migliore di applicare il pattern del repository. È il repository generico? Ma c'è un problema in cui alcuni oggetti di dominio non hanno lo stesso comportamento degli altri. È specificare il repository? Che dire della ripetizione del codice tra i repository? è sia un binomio? che ne dici di usare un di contenitore per entrambi i tipi di implementazione?Quali sono le migliori pratiche per creare una classe di repository con il codice EF4 prima?

Grazie

Edit: l'ORM che sto usando è Entity Framework 4. Sarebbe bello avere un esempio con EF4.

risposta

1

This post by Gabriel Schenker è una buona spiegazione del modello di repository. Lo implementa con NHibernate (non si specifica quale ORM si sta utilizzando) e fornisce un repository di base generico. Per me il pattern del repository è molto legato al testing e alla possibilità di simularlo o deriderlo e questo post sul blog mostra anche come creare il proprio falso.

Nella mia esperienza la maggior parte dei repository condivide alcune funzionalità comuni, ad es. GetById, Aggiungi, Rimuovi. Quindi è utile avere una classe base che può essere ereditata. Dove può diventare un po 'più complicato è quando inizi a pensare alle query dinamiche di Linq e come queste possono essere testate.

Esempi di modelli di repository con Linq possono essere trovati here e here ma vorrei iniziare in modo semplice in quanto potrebbero essere eccessivi per alcuni progetti.

+0

Bella spiegazione, hai qualche esempio di quando le query dinamiche di linq verrebbero utilizzate? – Rushino

+0

Ho aggiunto due collegamenti che mostrano come usare Linq con NHibernate. –

+0

Scusa ho appena realizzato che non ho detto l'orm che stavo usando quale entità framework 4. Hai qualche esempio con ef4 – Rushino

3

Il modello di repository è piuttosto esplicito in quelle aree che richiedono specifiche. Il resto viene escluso di proposito, perché dipende dai miei fattori esterni, come il linguaggio di programmazione, l'ambito del progetto e il tuo stile personale di programmazione.

In altre parole: sembra che tu stia chiedendo un modello su come applicare il modello, ma alla fine dovrai prendere le tue decisioni durante la programmazione.

cercherò di rispondere alle vostre domande più specifiche però:

  • Sì, utilizzando Generics è una buona idea per un repository. Un altro approccio sarebbe quello di avere un'interfaccia comune per tutti gli oggetti che dovrebbero essere memorizzati. Potresti anche andare con entrambi, a seconda delle tue esigenze.
  • Provare a gestire le differenze nel comportamento degli oggetti chiamando metodi polimorfici sugli oggetti da memorizzare.
  • Non ci dovrebbe essere ripetizione del codice se lo si fa correttamente (usando generici e/o interfacce).
Problemi correlati