Eventuali duplicati:
Interface vs Base classVantaggio di utilizzare l'interfaccia sulla classe astratta per il modello di repository?
Il suo comune per vedere il modello repository implementato utilizzando interfacce
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) {}
}
Ma si potrebbe ugualmente farlo utilizzando le classi astratte.
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); {}
}
Quali sono i vantaggi specifici di utilizzare un interfaccia su una classe astratta in uno scenario repository?
(vale a dire non solo dirmi che è possibile implementare più interfacce, so che questo già - perché l'hai fatto in un'implementazione repository)
Modifica per chiarire - pagine come " MSDN - Choosing Between Classes and Interfaces "può essere parafrasato come 'Scegli classi oltre le interfacce a meno che non ci sia una buona ragione per non' - quali sono le buone ragioni nel caso specifico di un modello Repository
non utilizzando un'interfaccia a prevenire la boxe e l'inefficienza questo porta? – Liam
Una scelta di design. –
@Pranay - dove va la tua risposta? : – Ryan