管理对象之间的复杂关系

时间:2013-09-01 19:11:18

标签: c#

我正在尝试理解在使用面向对象编程时如何模拟两个对象之间的“复杂”关系。

我可以理解如何管理简单关系,例如当对象之间存在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" };

我确信必须有一个可用于模拟这类情况的通用模式,但我一直无法找到解决方案!

1 个答案:

答案 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替换。 当多个人一起完成任务时,它将变得更加复杂。