在哪里存储类关系信息?

2020年6月29日 5点热度 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:将信息存储在第三个“信息”类中,例如作为矩阵。

解决方案如下:

无论在解决方案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
}

通过这种方式,您可以根据自己的需要自定义和更改内部存储方法,具体取决于您是希望只检索类的“传出”关系还是要获取“入站”关系。