Duplicar posible:
Interface vs Base class¿Ventajas de usar la interfaz sobre la clase abstracta para el patrón de repositorio?
Su común ver el patrón repositorio implementado utilizando Interfaces
public interface IFooRepository
{
Foo GetFoo(int ID);
}
public class SQLFooRepository : IFooRepository
{
// Call DB and get a foo
public Foo GetFoo(int ID) {}
}
public class TestFooRepository : IFooRepository
{
// Get foo from in-memory store for testing
public Foo GetFoo(int ID) {}
}
pero que podría ser igualmente esto utilizando las clases abstractas.
public abstract class FooRepositoryBase
{
public abstract Foo GetFoo(int ID);
}
public class SQLFooRepository : FooRepositoryBase
{
// Call DB and get a foo
public override Foo GetFoo(int ID); {}
}
public class TestFooRepository : FooRepositoryBase
{
// Get foo from in-memory store for testing
public override Foo GetFoo(int ID); {}
}
¿Cuáles son las ventajas específicas de la utilización de una interfaz a través de una clase abstracta en un escenario repositorio?
(es decir, no sólo dime que se puede implementar múltiples interfaces, ya que esto - ¿por qué hacer eso en un repositorio de aplicación)
Editar para aclarar - páginas como " MSDN - Choosing Between Classes and Interfaces "puede parafrasearse como 'Elija clases más de las interfaces a menos que haya una buena razón para no' - ¿Cuáles son las buenas razones en el caso específico de un patrón Repositorio
no afecta el uso de una interfaz a prevenir el boxeo y la ineficiencia esto trae? – Liam
Una de las opciones de diseño. –
@Pranay: ¿a dónde va tu respuesta? : – Ryan