2012-07-21 138 views
0

假设,我们班A_1A_n和类B_1B_n在哪里存储类关系信息?

每个A_i都与一组B_j之间有关系(抽象口语;关系可能是'A_4喜欢B_2'),并且相反。

问:哪里是存储关系信息的好地方?这种问题有没有好的模式?

解决方案1:每个A_i都有一个列表字段存储B_j它与它有关系。

解决方案2:每个B_i都有一个列表字段存储A_j它与它有关系。

溶液1和2基本上是相同的。

解决方案3:将信息存储在第三个“信息”类中,例如,作为矩阵。

+2

这要看情况。但是我觉得奇怪的是你的一套课程。你不应该有一个A类,一个B类,以及A和B的多个实例吗? – 2012-07-21 13:29:24

+0

第三种解决方案看起来相当不错,如果你认为有一点你可以有一个名为'Relation'的抽象类和另一个类'Like',这两个类都将组成关系(A和B)和属性。 +1 JBNizet的评论 – 2012-07-21 13:29:41

+0

我把它从你的描述,所有的关系都是双向的? – Keppil 2012-07-21 13:36:50

回答

1

无论你选择之间解决方案1 ​​解决方案2什么一类喜欢只存储在另一个类,这似乎有点倒退的一些信息是哪一个。
因此,我肯定会去为一个单独的RelationKeeper类,像这样:

public enum RelationType { 
    LIKES,HATES... 
} 
public class Relation { 
    RelationType type; 
    Class relatedClass; //Or in what type and form this is stored 
} 
public class RelationKeeper { 
    public List<Relation> getRelationsFor(Class c) { 
    } 
    public void setRelationsFor(Class c, List<Relation> relations) { 
    } 
    public void addRelationFor(Class c, Relation relation) { 
    } 
    ...etc 
} 

这种方式,您可以自定义和改变内部存储的方法来满足您的需求,这取决于你希望能够在只检索一个类的“外向”关系,或者如果你还想获取“入站”关系。