2009-10-02 9 views
5

Soy nuevo en el patrón de repositorio pero lo intenté, mi objetivo es hacer un diseño que me permita fácilmente con algunas ediciones "inyección de dependencia, o ediciones de configuración" para poder cambiar a otro ORM sin tocar otras capas de solución .cómo diseñar un patrón de repositorio para que sea fácil cambiar a otro ORM más adelante?

llegué a esta implementación: alt text

y aquí está el código:

uso
public interface IRepository<T> 
{ 
    T Get(int key); 
    IQueryable<T> GetAll(); 
    void Save(T entity); 
    T Update(T entity); 
    // Common data will be added here 
} 
public interface ICustomerRepository : IRepository<Customer> 
{ 
    // Specific operations for the customers repository 
} 
public class CustomerRepository : ICustomerRepository 
{ 
    #region ICustomerRepository Members 

    public IQueryable<Customer> GetAll() 
    { 
     DataClasses1DataContext context = new DataClasses1DataContext(); 
     return from customer in context.Customers select customer; 
    } 

    #endregion 

    #region IRepository<Customer> Members 

    public Customer Get(int key) 
    { 
     throw new NotImplementedException(); 
    } 

    public void Save(Customer entity) 
    { 
     throw new NotImplementedException(); 
    } 

    public Customer Update(Customer entity) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

en mi página aspx:

protected void Page_Load(object sender, EventArgs e) 
    { 
     IRepository<Customer> repository = new CustomerRepository(); 
     var customers = repository.GetAll(); 

     this.GridView1.DataSource = customers; 
     this.GridView1.DataBind(); 
    } 

como se vio en el código anterior i am ahora usando LINQ a sql, y como ve mi código está vinculado a LINQ to sql, cómo cambiar este diseño de código para lograr mi objetivo "poder cambiar a otro ORM fácilemte, por ejemplo, para ADO.net marco de la entidad, o subsónica"

consejos favor con código simple muestra de

Respuesta

3

Inc pared o' texto

Lo que está haciendo es correcto, el código de se aplicaría a cada repositorio.

Como ha indicado, el propósito del patrón Repository es que pueda intercambiar la forma en que los datos se entregan a su aplicación sin tener que refactorizar su código en su aplicación (interfaz de usuario/capa de entrega).

Tome, por ejemplo, si decide cambiar a Linq a Entidades o ADO.NET.

Todo lo que necesitaría es escribir el código para el ORM que va a utilizar (heredando la Interfaz adecuada), luego haga que su código use ese repositorio. Por supuesto, necesitaría reemplazar todas las referencias del antiguo repositorio o cambiar el nombre/reemplazar sus repositorios ORM antiguos para que su aplicación utilice los adecuados (a menos que esté utilizando algún tipo de contenedor IoC, en el que especificaría qué repositorio pasar) .

El resto de la aplicación continuará ejecutándose correctamente ya que todos los métodos que utilizó para obtener/editar sus datos devolverán los objetos adecuados.

En términos sencillos, los repositorios le darán a su aplicación los datos que necesita de la misma manera. La única diferencia es cómo se recuperan esos datos de su base de datos (ADO.NET/Linq a algo, etc.)

Tener sus clases heredadas de las interfaces de repositorio es una restricción difícil, asegurándose de que muestren los datos de manera uniforme que está de acuerdo con la forma en que su aplicación lo usa.

Cuestiones relacionadas