Где хранить информацию о классовых отношениях?

Предположим, у нас есть классы A_1 в A_n и классы B_1 в B_n,

каждый A_i имеет отношения (речевая абстракция; отношение может быть "A_4 любит B_2") с набором B_jи то же самое наоборот.

Вопрос: Где хорошее место для хранения информации о взаимоотношениях? Есть ли хороший образец для такого рода проблем?

Решение 1: каждый A_i имеет список полей для хранения B_jЭто имеет отношение к.

Решение 2: каждый B_i имеет список полей для хранения A_jЭто имеет отношение к.

Решение 1 и 2 в основном совпадают.

Решение 3. Храните информацию в третьем "информационном" классе, например, в виде матрицы.

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
}

Таким образом, вы можете настроить и изменить метод внутреннего хранения в соответствии с вашими потребностями, в зависимости от того, хотите ли вы получать только "исходящие" отношения класса или если вы также хотите иметь возможность извлекать "входящие" отношения.

Другие вопросы по тегам