Ich habe ein Programm, wo der Benutzer eine Liste von Child-Objekte erstellt. Nachdem sie alle Kinder hinzugefügt haben, können sie auf das Kind klicken und entscheiden, ob dieses Kind unartig ist und wenn ja, erstellen Sie eine Liste, mit der sie nicht zusammen sitzen können.Sollte ich eine Schnittstelle, Vererbung oder einfach mehr Logik zur Basisklasse hinzufügen
Soll ich eine boolesche IsNaughty und eine Liste zur Basisklasse hinzufügen, oder sollte ich eine andere Klasse namens NaughtyChild erstellen, die von Child erbt, und eine ICantSitWith-Schnittstelle implementiert, die eine Liste enthält. Ich müsste dann jedes unartige Kind in die abgeleitete Klasse verwandeln.
Was ich bisher
public class Child
{
private static int IdCount = 0;
public string Name { get; set; }
public int Id{ get; }
public Child(string name)
{
Name = name;
IdCount++;
Id = IdCount;
}
public override string ToString()
{
return Name;
}
}
public class DisruptiveChild :Child , ICantSitWith
{
public List<Child> CantSitNextToo { get; set; }
public DisruptiveChild(string name, List<Child> cantSitNextToo):base(name)
{
CantSitNextToo = cantSitNextToo;
}
public DisruptiveChild(string name):base(name)
{
CantSitNextToo = null;
}
}
Es gibt keine Schwarz-Weiß-Regeln, aber im Allgemeinen würde ich ein Design vermeiden, bei dem man ein "Child" -Objekt wegwerfen muss, um ein "DisruptiveChild" -Objekt zu erzeugen. Betrachten Sie stattdessen vielleicht ein Design, bei dem die Beziehungen zwischen Kindern als eigene Entitäten und nicht als Eigenschaften der Kinder selbst modelliert werden. –
Weder. Sie sollten einen Kompositionsansatz favorisieren, der "has-a" Behaviorismen anstelle von "is-a" Vererbung zu Ihren Objekten bringt. –