Я сталкиваюсь с некоторыми проблемами объектных отношений в приложении, которое, помимо прочего, обрабатывает упражнения с несколькими вариантами ответов.
Думая об этих упражнениях, я могу что:
1- У меня естьупражнения, в которых есть несколько вопросов, которые имеют несколько альтернатив.2- Конкретный вопрос может быть частью упражнений.3- Конкретная альтернатива НЕ может быть частью нескольких вопросов.
С точки зрения отношений:
Упражнение Вопрос
Вопрос <1-n> Альтернатива
Я кодировал классы следующим образом:
class Exercise {
private $id;
private $name;
private $questions = []; //array of ExerciseQuestion
//...
}
class ExerciseQuestion {
private $id;
private $exercise = new Exercise();
private $question = new Question();
private $order; //handles question's order of appearance
//...
}
class Question {
private $id;
private $wording;
//...
}
class Alternative {
private $id;
private $question = new Question();
private $text;
//...
}
Я не знаю, правильно ли я это сделал, но вместо того, чтобы хранить идентификаторы отношений в атрибутах классов, я храню экземпляр связанного класса,Когда я начинал, это был правильный подход.
Проблема, которую я предвидел, заключается в том, что в отношении Exercise-ExerciseQuestion-Question я попаду в ад круговых ссылок.У меня будет упражнение с несколькими ExerciseQuestion, которое содержит экземпляр Exercise с большим количеством ExerciseQuestion внутри.Прав ли я в этом предположении?
Есть ли лучший или правильный способ выразить такие отношения?Стоит ли менять идентификаторы хранилищ вместо экземпляров или можно использовать какой-то шаблон проектирования?