2013-09-01 42 views
0

我想了解如何在使用面向對象編程時對兩個對象之間的「複雜」關係進行建模。管理對象之間的複雜關係

我可以理解如何管理簡單的關係,例如當對象之間存在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 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

呃...一個M:N映射? 「任務」具有「列表 QualifiedPeople」屬性,和/或「Person」具有「列表 AvailableTasks」列表。顯然,你的代碼必須確保修改關係的兩端,以保持同步。 – millimoose

+0

任務可以由'Joe'和'Jon'完成,或者只有一個人完成? – Chris

回答

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; } 
} 

這是相同的父/子。只有'孩子'被任務取代。 當多個人一起完成任務時,它會變得更加複雜。

相關問題