Ik ben een simpele vragenlijst in elkaar aan het draaien en tot zover werkt alles naar behoren. Tot het moment dat ik aan conditionele vragen dacht en dit wilde implementeren 
Wat is het probleem
Ik heb GEEN idee hoe ik de vragenlijst op een degelijke manier moet opzetten zonder dat het een complexe puinzooi wordt...
Denk aan de volgende vragenlijst:
De algemene structuur met validatie en dergelijke heb ik al helemaal werkend. Echter het conditionele aspect maakt het lastig voor me. Ik had voorheen gewoon een IList<QuestionControl> van vragen die ik wilde stellen. Dit was een simpele list en het enige wat ik hoefde te doen was de index te verhogen of te verlagen (afhankelijk van of er op "volgende" of "vorige" werd gedrukt).
Echter weet ik nu niet goed hoe ik het afgelegde path moet vasthouden EN weten wat de volgende vraag moet worden. Mijn idee was alsvolgt, ik hou gewoon een IList<QuestionControl> bij voor alle vragen die ik beantwoord hebt. Op deze manier kan ik doodsimpel terug in de vragenlijst. Ik hoef dan alleen de index te verlagen. Maar hoe ga ik dan om met de volgende knop? Ik zal een korte uitleg geven van mijn huidige structuur.
Ik heb één hoofdklasse QuestionControl en drie subclasses genaamd:
- TextQuestionControl (voor de openvragen)
- DropdownQuestionControl (voor de combobox vragen)
- CheckListQuestionControl (voor wanneer er meerdere mogelijkheden zijn).
De SubQuestions zijn eigenlijk alleen relevant voor DropdownQuestionControls en CheckListQuestionControls en ik kan aangeven per SubQuestion wat de antwoord index is. Ik pak de bovenstaande vragenlijst er even bij in pseudo-code hoe ik het in gedachten had:
En hier begint mijn probleem eigenlijk. Op het moment dat ik de diepte in ga met de subvragen, weet ik niet goed hoe ik het knap kan oplossen. Stel dat ik bij question1dot2 ben, hoe weet ik dan dat er nog een subvraag bij vraag 1 hoort? Question1dot2 moet namelijk OOK gevraagd worden, aangezien dit dezelfde conditie heeft als question1dot1 (namelijk optie 2).
Ik kan natuurlijk recursief aan de parent's vragen of de child al beantwoord is en zo niet dan wordt dit de volgende vraag, echter lijkt me dit niet zo heel efficiënt. Zijn er toevallig design patterns die specifiek dit probleem tackelen?
Elke hulp wordt zeer gewaardeerd!!
Wat is het probleem
Ik heb GEEN idee hoe ik de vragenlijst op een degelijke manier moet opzetten zonder dat het een complexe puinzooi wordt...
Denk aan de volgende vragenlijst:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| 1. Hou je van spruitjes? - Ja - Nee 1.1 Waarom niet? [Conditie 1.1 = Nee] - Omdat ik het vies vind - Omdat ik liever spinazie eet 1.2 Hoe zou je spruitjes koken om het wel lekker te maken? [Conditie 1.1 = Nee] - Geen idee - Roerbakken met spekjes 2. Etc. |
De algemene structuur met validatie en dergelijke heb ik al helemaal werkend. Echter het conditionele aspect maakt het lastig voor me. Ik had voorheen gewoon een IList<QuestionControl> van vragen die ik wilde stellen. Dit was een simpele list en het enige wat ik hoefde te doen was de index te verhogen of te verlagen (afhankelijk van of er op "volgende" of "vorige" werd gedrukt).
Echter weet ik nu niet goed hoe ik het afgelegde path moet vasthouden EN weten wat de volgende vraag moet worden. Mijn idee was alsvolgt, ik hou gewoon een IList<QuestionControl> bij voor alle vragen die ik beantwoord hebt. Op deze manier kan ik doodsimpel terug in de vragenlijst. Ik hoef dan alleen de index te verlagen. Maar hoe ga ik dan om met de volgende knop? Ik zal een korte uitleg geven van mijn huidige structuur.
C#:
1
2
3
4
5
| public class QuestionControl { public bool IsValid; public bool IsMandatory; public IList<int, QuestionControl> SubQuestions; } |
Ik heb één hoofdklasse QuestionControl en drie subclasses genaamd:
- TextQuestionControl (voor de openvragen)
- DropdownQuestionControl (voor de combobox vragen)
- CheckListQuestionControl (voor wanneer er meerdere mogelijkheden zijn).
De SubQuestions zijn eigenlijk alleen relevant voor DropdownQuestionControls en CheckListQuestionControls en ik kan aangeven per SubQuestion wat de antwoord index is. Ik pak de bovenstaande vragenlijst er even bij in pseudo-code hoe ik het in gedachten had:
C#:
1
2
3
4
5
6
7
| DropdownQuestionControl question1 = new DropdownQuestionControl("Hou je van spruitjes?", new string[] { "Ja", "Nee" }); DropdownQuestionControl question1dot1 = new DropdownQuestionControl("Waarom niet?", new string[] { "Omdat ik het vies vind", "Omdat ik liever spinazie eet" }); question1.SubQuestions.Add(1, question1dot1); // Deze subvraag moet dus getoond worden wanneer er voor de tweede optie "Nee" is gekozen bij question1 DropdownQuestionControl question1dot2 = new DropdownQuestionControl("Hoe zou je spruitjes koken om het wel lekker te maken?", new string[] { "Geen idee", "Roerbakken met spekjes" }); question1.SubQuestions.Add(1, question1dot2); // Andere subvraag, ook wanneer bij question1, optie 2 wordt gekozen |
En hier begint mijn probleem eigenlijk. Op het moment dat ik de diepte in ga met de subvragen, weet ik niet goed hoe ik het knap kan oplossen. Stel dat ik bij question1dot2 ben, hoe weet ik dan dat er nog een subvraag bij vraag 1 hoort? Question1dot2 moet namelijk OOK gevraagd worden, aangezien dit dezelfde conditie heeft als question1dot1 (namelijk optie 2).
Ik kan natuurlijk recursief aan de parent's vragen of de child al beantwoord is en zo niet dan wordt dit de volgende vraag, echter lijkt me dit niet zo heel efficiënt. Zijn er toevallig design patterns die specifiek dit probleem tackelen?
Elke hulp wordt zeer gewaardeerd!!
PSN: Norfirin