Wenn die Logik arbeitet an Schnittstelle Mitglieder, im Gegensatz zu Implementierung Mitglieder, dann eine Hilfsmethode [oder Erweiterungsmethode] Schreiben wird empfohlen.
public IRandom
{
byte NextByte();
}
public static class IRandomExtensions
{
// logic that acts against public interface IRandom
// may be applied to all implementations
public static int GetNextUnbiasedInteger (this IRandom random) { }
public static IEnumerable<T> Shuffle<T> (
this IRandom random,
IEnumerable<T> items) { }
}
Wenn Business-Logik arbeitet gegen Implementierung Mitglieder,
public class SomeCommand : ICommand
{
// an implementation-specific member, NOT a member
// of ICommand
public int SomeControlCount { get; set; }
}
// a method that references implementation-speciic
// details. where should this go?
public void DoSomething()
{
SomeCommand command;
int count = command.SomeControlCount;
}
dann wahrscheinlich sollten wir stärker binden diese an die implementierende Klasse. Wenn dies häufig vorkommt, kann eine Basisklasse sinnvoll sein.
Persönlich, komplexe Hierarchien sind mehr Mühe, als sie wert sind, verwenden Sie Ihr eigenes Urteil in Bezug auf Wartbarkeit, Lesbarkeit und Wiederverwendung, und Sie sollten in Ordnung sein!
Hoffe, das hilft! :)
Oder umgekehrt: Machen Sie die Hilfsklasse zu einem Dekorator und injizieren Sie die Befehlsklasse in die Hilfsklasse. – Ozan
+1 Denken Sie bei der Wiederverwendung von Code nicht an "Vererbung", sondern an "Aggregation". –