Ich habe eine Klasse, die eine Möglichkeit zum Abrufen eines zufälligen Integer-Werts mit einem Maximum erfordert. Ich möchte nicht, dass diese Klasse auf eine bestimmte Art und Weise angewiesen wird, um diesen zufälligen Wert (wie system.random) abzurufen. Wäre es am besten zu:C# Best Practice: Verwenden eines Delegaten oder einer Schnittstelle als Klassenabhängigkeit
(A) Verwenden Sie ein öffentlich Delegierten (oder func)
public delegate int NextRandomInt(int maxValue);
public class MyClass
{
public NextRandomInt NextRandomInt { get; set; }
public MyClass(NextRandomInt nextRandomInt)
{
NextRandomInt = nextRandomInt;
}
}
(B) Verwenden Sie einen öffentlichen Schnittstelle
public interface IRandomIntProvider
{
int NextInt(int maxValue);
}
public class MyClass
{
public IRandomIntProvider RandomIntProvider { get; set; }
public MyClass(IRandomIntProvider randomIntProvider)
{
RandomIntProvider = randomIntProvider;
}
}
(C) Etwas sonst alles zusammen.
Beide Möglichkeiten funktionieren. Ich denke, die Verwendung eines Delegaten wäre einfacher und schneller zu implementieren, aber die Schnittstelle ist besser lesbar und möglicherweise einfacher, wenn die Abhängigkeitsinjektion kommt.
Suchen nach [Strategie] (http://www.dofactory.com/net/strategie-design-pattern) GOF Entwurfsmuster. Es kann dir helfen. – Fabjan