Где хранить информацию о классовых отношениях?
Предположим, у нас есть классы 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
}
Таким образом, вы можете настроить и изменить метод внутреннего хранения в соответствии с вашими потребностями, в зависимости от того, хотите ли вы получать только "исходящие" отношения класса или если вы также хотите иметь возможность извлекать "входящие" отношения.