2010-11-03 46 views
0

我工作的一個輕量級的文檔管理系統,並正在尋找一些幫助,如何最好地某些關係進行建模。基本上,我正在與兩個「組織單位」合作:Group s和Type s。當一個組和一個類型相結合時,它們形成一個Link,然後Document被關聯。注意,Group可以與多於一種類型的組合,因此,例如可以有一個Link「組1」的組成和「類型A」和第二Link「組1」和「B型」的組成。在我看來,這並不是真正構建它的最好方式,但是在這一點上,我無法改變它,所以我不得不與我給出的東西做一下。建模親子關係與類

Document可以是多個Link s的構件。例如,「文檔A」可以是「鏈接10」和「鏈接13」的成員。

我的問題是,有時我會想顯示一個Document,並列出每一個LinkDocument屬於,其他時候我會想顯示一個Link,並列出每一個Document屬於該Link

我不知道如何表示這些類之間的關係。我研究過複合模式,但我不認爲這對我有效,因爲它似乎要求一個孩子只有一個父母,在我的情況下,一個孩子可以有多個父母。任何幫助,將不勝感激。

+0

另請參見http://stackoverflow.com/questions/2780982/many-to-many-relationship-in-oop – YWE 2010-11-03 17:12:48

回答

2

什麼,你可能尋找的是一種n對M映射。是所有OOP-Y,你可以在每個類別中存儲這些映射:

// actually write it using properties, information hiding etc instead... 
public class Document { 
    public ICollection<Link> Links; 
} 

public class Link { 
    public ICollection<Document> Documents; 

    // this can be on Document as well, depending on what semantics you want... 
    public void Add(Document d) { 
     Documents.Add(d); 
     d.Links.Add(this); 
} 
3

從你描述一個多到多關係數據上來看,這些關係通常需要代表的關係本身就是一個實體。

所以你的情況,我將介紹以下對象:

public class DocumentLink 
{ 
    public Document Document { get; set; } 
    public Link Link { get; set; } 
} 

然後每個文件可以有DocumentLink對象的集合,並且每個鏈路可以有DocumentLink對象的集合,以及。

當然,你可以引入輔助方法更直接檢索文件和鏈接所有鏈接的所有文件,但是這是我下使用基本結構。

+1

這就是你將如何構建數據庫佈局('DocumentLink'表),但我認爲從類設計的角度來看,@thecoop有更實際的解決方案。當然,如果'DocumentLink'條目中沒有額外的數據(即DateCreated),在這種情況下,這種方法是必需的。 – Remus 2010-11-03 17:12:44