2011-12-07 14 views
2

私はクラスFormを持っています。これは、Questionのハッシュを保持しています。 1の質問への答えは、「既婚」、表示質問2は、それ以外の場合は表示されませんであればサイクル参照を避ける

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

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

私は別の質問の答えに依存するため、単一の質問をしたい、と言います。

これを実装する適切な方法は何でしょうか?

フォームインスタンスの参照を質問インスタンスに追加して、後でに質問のへのアクセスを許可しますか。私はそれが好きではありませんが。

もう1つの方法は、質問IDを受け取ってそのすべての依存関係が満たされているかどうかをチェックするメソッドをフォームに追加することですが、再度フォームインスタンスを認識する必要があります。

最後に: システムのモジュール性と各クラスの環境をできるだけ認識しないようにするにはどうすればよいですか?あるいは、少なくともサイクル参照を避けてください。

ありがとうございます。個々の質問が唯一の彼らの直接の依存関係の知識を持っていながら、

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の線に沿って何かについて、グローバルな「尋問」状態を追跡して何

答えて

0

。私にとっては、これは比較的クリーンなアプローチのようです。

+0

お返事ありがとうございます。 いずれにしても、私はForm.Display()が持っている質問のリストを反復し、それぞれの質問に対して.Ask()または.Render()を呼び出します。問題は、質問が必ずしも同じ順序で出現するとは限らないことです。質問12は質問4の答えに依存するかもしれません。 いずれの場合も、フォームのRenderメソッドは、質問の回答と依存関係のそれぞれにアクセスできるため、質問を表示するかどうかを決定する責任があることを意味します。 私はあなたの答えを理解しました。ありがとう。 – Alex

関連する問題