我正在尝试理解在使用面向对象编程时如何模拟两个对象之间的“复杂”关系。
我可以理解如何管理简单关系,例如当对象之间存在1:1或1:M映射时,即;
1:1关系
public Car
{
public string Manufacturer { get; set; }
public string Model { get; set; }
public Engine Engine { get; set; } // 1:1 relationship here
}
public Engine
{
public int NumberOfCylinders { get; set; }
public Car Car { get; set; } // 1:1 relationship here
}
1:M关系
public Father
{
public string FullName { get; set; }
public List<Child> Children { get; set; } // 1:M relationship here
}
public Child
{
public string FullName { get; set; }
public Father Father { get; set; } // 1:M relationship here
}
..但问题是,当关系更复杂时,如何管理两个对象之间的关系?
例如,让我们假设一个例子,当有一个任务可以由Joe OR John完成时(即任何一个人都可以完成任务)。我该如何塑造这个?
public Task
{
public string Description { get; set; }
// what do I put here?
}
public Person
{
public string FullName { get; set; }
// what do I put here?
}
var joe = new Person() { FullName = "Joe" };
var john = new Person() { FullName = "John" };
var task = new Task() { Description = "Task that can be completed by either Joe or John" };
我确信必须有一个可用于模拟这类情况的通用模式,但我一直无法找到解决方案!
答案 0 :(得分:1)
我会做这样的事情:
public Task
{
public string Description { get; set; }
// what do I put here?
public Person CompletedByPerson { get; set; }
}
public Person
{
public string FullName { get; set; }
// what do I put here?
public List<Task> CompletedTasks { get; set; }
}
和父亲/孩子一样。只有'child'被Tasks替换。 当多个人一起完成任务时,它将变得更加复杂。