Ich könnte mir vorstellen, dass ein Kind auch ein Elternteil auf der ganzen Linie sein kann (wenn er Glück hat ... oder Pech, je nach Standpunkt), so würde ich mit etwas gehen wie:
IPerson
{
string Name {get; set;}
string LastName {get; set;}
// whatever else - such as sizeOfShoe, dob, etc
}
IHaveParents
{
// might wanna limit this to a fixed size
List<IPerson> Parents {get; set;}
}
IHaveChildren
{
List<IPerson> Children {get; set;}
}
IHaveSpouse
{
IPerson Spouse {get; set;}
}
public class DudeWithParentsAndChildren : IPerson, IHaveParents, IHaveChildren, IHaveSpouse
{
public void AskMoneyToParents(){throw new Exception("Implement me!");}
public void SlapChildren(){}
private void CheatOnSpouse(){}
// some other stuff that such a dude can do i.e. GoBowling
}
Und du könntest es einfach so erweitern, wie du es magst, wenn neue Anforderungen kommen (vertrau mir das).
aktualisieren: in Ihrem Fall also, wenn Sie nur ein Kind Eltern und den anderen Weg zu haben um Sie so etwas wie tun würde:
public class Child : IPerson, IHaveParents
{
public void AskMoneyToParents(){throw new Exception("Implement me!");}
}
public class Parent : IPerson, IHaveChildren, IHaveSpouse
{
public void SlapChildren(){}
private void CheatOnSpouse(){}
// some other stuff that such a dude can do i.e. GoBowling
}
Auf diese Weise, wenn Sie einen IHaveFriends haben wollen Schnittstelle, die Sie können (was den Implementierer dazu zwingt, eine Liste von IPersons als eine Eigenschaft namens Friends verfügbar zu machen). Wenn Sie es nicht brauchen, tun Sie es nicht, aber die Tatsache, dass Sie es einfach tun können, einfach eine Schnittstelle hinzufügen und alles andere gleich bleibt, bedeutet, dass Sie ein ziemlich anständiges erweiterbares Modell haben (nicht unbedingt das Beste, wissen Sie was ich meine).
Das Bild fehlt ... Können Sie bitte das Bild auf Imgur anstatt, einen Verweis auf den Dropbox Link posten? – Sometowngeek