Mam klasę, która wymaga sposobu na pobranie losowej wartości całkowitej z maksymalną wartością. Nie chcę, aby ta klasa była zależna od określonego sposobu pobierania tej losowej wartości (takiej jak system.random). Najlepiej byłoby, aby:C# Najlepsza praktyka: używanie delegata lub interfejsu jako zależności klasowej
(A) Za pomocą publiczną delegata (lub func)
public delegate int NextRandomInt(int maxValue);
public class MyClass
{
public NextRandomInt NextRandomInt { get; set; }
public MyClass(NextRandomInt nextRandomInt)
{
NextRandomInt = nextRandomInt;
}
}
(B) Za pomocą publiczną interfejs
public interface IRandomIntProvider
{
int NextInt(int maxValue);
}
public class MyClass
{
public IRandomIntProvider RandomIntProvider { get; set; }
public MyClass(IRandomIntProvider randomIntProvider)
{
RandomIntProvider = randomIntProvider;
}
}
(C) Coś jeszcze razem.
Oba sposoby działają. Wydaje mi się, że użycie delegata byłoby prostsze i szybsze do wdrożenia, ale interfejs jest bardziej czytelny i może być łatwiejszy, gdy pojawi się iniekcja zależności.
Sprawdź [wzór] (wzór) (http://www.dofactory.com/net/strategy-design-pattern) wzór projektu GOF. To może ci pomóc. – Fabjan