Ho una classe che richiede un modo per recuperare un valore intero casuale con un massimo. Non voglio che questa classe dipenda da un modo specifico per recuperare quel valore casuale (come system.random). Sarebbe meglio:C# Best practice: utilizzo di un delegato o un'interfaccia come dipendenza di classe
(A) Utilizzare un pubblico delegato (o func)
public delegate int NextRandomInt(int maxValue);
public class MyClass
{
public NextRandomInt NextRandomInt { get; set; }
public MyClass(NextRandomInt nextRandomInt)
{
NextRandomInt = nextRandomInt;
}
}
(B) Utilizzare un pubblico un'interfaccia
public interface IRandomIntProvider
{
int NextInt(int maxValue);
}
public class MyClass
{
public IRandomIntProvider RandomIntProvider { get; set; }
public MyClass(IRandomIntProvider randomIntProvider)
{
RandomIntProvider = randomIntProvider;
}
}
(C) Qualcosa altrimenti tutti insieme.
Entrambe le modalità funzionano. Mi sento come se l'utilizzo di un delegato fosse più semplice e più veloce da implementare, ma l'interfaccia è più leggibile e potrebbe essere più semplice quando l'iniezione della dipendenza arriva.
Verificare la [Strategia] (http://www.dofactory.com/net/strategy-design-pattern) modello di progettazione GOF. Potrebbe aiutarti. – Fabjan