2010-11-03 44 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