我正在研究一个轻量级的文档管理系统,我正在寻找一些帮助,以便最好地建立某些关系。基本上,我正在使用两个“组织单位”:Group
和Type
。当组合和类型组合时,它们形成Link
,然后Document
与Group
相关联。请注意,Link
可以与多种类型组合使用,例如,您可以将一个Link
组成“组1”和“类型A”,第二个Document
组成'第1组'和'B类'。在我看来,这并不是构建它的最佳方式,但在这一点上我无法改变它所以我必须处理我所给予的。
Link
可以是多个Document
的成员。例如,“文档A”可以是“链接10”和“链接13”的成员。
我的问题是,有时候我会想要显示一个Link
并列出Document
所属的Link
,而有时我会想要显示一个Document
并列出属于Link
的每个{{1}}。
我不确定如何表示这些类之间的关系。我已经研究过复合模式,但我不认为这对我有用,因为它似乎要求一个孩子只有一个父母,在我的情况下,一个孩子可以有多个父母。任何帮助,将不胜感激。
答案 0 :(得分:3)
从数据的角度来看,您描述的是多对多关系,而这些关系通常需要一个表示关系本身的实体。
所以在你的情况下,我会介绍以下对象:
public class DocumentLink
{
public Document Document { get; set; }
public Link Link { get; set; }
}
然后每个Document都可以有一个DocumentLink对象集合,每个Link也可以有一个DocumentLink对象集合。
当然,你可以引入帮助方法来更直接地检索文档的所有链接和链接的所有文档,但这是我将在下面使用的基本结构。
答案 1 :(得分: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);
}