Tôi tưởng tượng rằng một đứa trẻ cũng có thể là cha mẹ xuống dòng (nếu anh ta được may mắn ... hay bất hạnh, tùy thuộc vào quan điểm) vì vậy tôi sẽ đi với một cái gì đó như:
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
}
Và bạn có thể dễ dàng mở rộng điều này theo bất kỳ cách nào bạn thích khi yêu cầu mới đến (tin tôi đi).
Cập nhật: Vì vậy, trong trường hợp của bạn nếu bạn chỉ muốn một trẻ em có cha mẹ và ngược lại bạn muốn làm điều gì đó như:
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
}
Bằng cách này nếu bạn muốn có một IHaveFriends giao diện bạn có thể (mà về cơ bản buộc người triển khai đưa ra một danh sách các IPersons như một tài sản có tên là Friends). Nếu bạn không cần nó không làm điều đó, nhưng thực tế là bạn có thể dễ dàng làm điều đó chỉ cần thêm một giao diện, mọi thứ khác vẫn giống như bạn có một mô hình khá mở rộng (không nhất thiết là tốt nhất, bạn biết ý tôi là gì).
Hình ảnh bị thiếu ... Bạn có thể vui lòng đăng hình ảnh lên imgur thay vì thực hiện tham chiếu đến liên kết Dropbox không? – Sometowngeek