Я предположил бы, что ребенок также может быть родителем вниз линии (если он повезет ... или не повезло, в зависимости от точки зрения), так что я бы что-то вроде:
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
}
И вы можете легко распространить это так, как вам нравится, когда появятся новые требования (верьте мне, что они будут).
Update: Так что в вашем случае, если вы хотите ребенка, чтобы иметь родителей и наоборот вы могли бы сделать что-то вроде:
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
}
Таким образом, если вы хотите иметь IHaveFriends интерфейс, который вы можете (что в основном заставляет исполнителя реализовать список IPersons как свойство «Друзья»). Если вам это не нужно, не делайте этого, но тот факт, что вы можете легко сделать это, просто добавив интерфейс, все остальное останется таким же, как у вас есть довольно приличная расширяемая модель (не обязательно лучшая, вы знаете что я имею в виду).
Изображение отсутствует ... Не могли бы вы разместить изображение на imgur вместо ссылки на ссылку Dropbox? – Sometowngeek