Избегайте циклических ссылок - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть класс Form, который содержит хэш Question элементов.

class Form
{
    Dictionary < int , Answer> listOfQuestions;
}

class Question
{
    int questionId = 2;
    int dependsOnQuestion = 1;
    string answer;
    public bool IsDependancyMet() {/*problem*/}
}

Я хочу, чтобы один вопрос зависел от ответа на другой вопрос, скажем, если ответ на вопрос 1 «женат», отобразите вопрос 2, в противном случае не отображайте его.

Каков будет правильный способ реализации этого?

Это будет добавление ссылки экземпляра Form к экземпляру вопроса, чтобы позволить последующему доступу к хэшу вопросов. Хотя мне это не нравится.

Другой способ - добавить метод к классу Form, который получает идентификатор вопроса и проверяет, выполнены ли все его зависимости, но опять же, вопрос должен знать об экземпляре формы.

В нижней строке: Кто должен проверить зависимости и как сделать систему модульной, а каждый класс - менее осведомленным о своей среде? Или, по крайней мере, избегайте циклических ссылок.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 декабря 2011

Как насчет чего-то вроде

class Form
{
    Dictionary < int , Answer> listOfQuestions;
    int firstQuestion;

    public void NextQuestion() {
       // ... cycle through `listOfQuestions` looking for a question
       // whose dependencies are fullfilled and ask it.
    }
}

class Question
{
    // ...
    public List<int> GetDependencies();
    public void Ask();
    // ...
}

Form отслеживает глобальное состояние «опроса», в то время как отдельные вопросы знают только их прямые зависимости. Мне это кажется относительно чистым подходом.

...