refactor: declaratieve vraagstekst-mapping per quizType #70

Closed
opened 2026-04-12 16:09:52 +02:00 by Ghost · 1 comment
Ghost commented 2026-04-12 16:09:52 +02:00 (Migrated from codeberg.org)

Probleem

In renderQuestion() staan hardgecodeerde if-blokken voor de vraagstekst:

if (isProvince) {
  text = currentCity.kind === 'gewest' ? 'Welk gewest is dit?' : 'Welke provincie is dit?';
} else if (isWater) {
  text = 'Welk water is dit?';
} else if (isCountry) {
  text = 'Welk land is dit?';
} else {
  text = currentCity.name;
}

Bij elk nieuw quizType of fase-variant moet je dit if-blok uitbreiden.

Oplossing

Declaratieve mapping:

const QUESTION_TEXT = {
  province: item => item.kind === 'gewest' ? 'Welk gewest is dit?' : 'Welke provincie is dit?',
  water:    () => 'Welk water is dit?',
  country:  () => 'Welk land is dit?',
  place:    city => city.name,
  mountain: () => 'Welk gebergte is dit?',  // klaar voor toekomstige types
  island:   () => 'Welk eiland is dit?',
};

document.getElementById('question-text').textContent =
  QUESTION_TEXT[currentQuizType()](currentCity);

Nieuwe quizTypes voegen één regel toe aan de mapping zonder if-blokken te editten.

Impact

  • ~10 regels vereenvoudigd
  • Open/closed principle: uitbreidbaar zonder bestaande code te wijzigen

Risico

Laag. Playwright smoke tests voor set 72 ("Welk gewest is dit?") en set 71 zijn de regressiecheck.

Zie REFACTORING.md voorstel #7

## Probleem In `renderQuestion()` staan hardgecodeerde if-blokken voor de vraagstekst: ```js if (isProvince) { text = currentCity.kind === 'gewest' ? 'Welk gewest is dit?' : 'Welke provincie is dit?'; } else if (isWater) { text = 'Welk water is dit?'; } else if (isCountry) { text = 'Welk land is dit?'; } else { text = currentCity.name; } ``` Bij elk nieuw quizType of fase-variant moet je dit if-blok uitbreiden. ## Oplossing Declaratieve mapping: ```js const QUESTION_TEXT = { province: item => item.kind === 'gewest' ? 'Welk gewest is dit?' : 'Welke provincie is dit?', water: () => 'Welk water is dit?', country: () => 'Welk land is dit?', place: city => city.name, mountain: () => 'Welk gebergte is dit?', // klaar voor toekomstige types island: () => 'Welk eiland is dit?', }; document.getElementById('question-text').textContent = QUESTION_TEXT[currentQuizType()](currentCity); ``` Nieuwe quizTypes voegen één regel toe aan de mapping zonder if-blokken te editten. ## Impact - ~10 regels vereenvoudigd - Open/closed principle: uitbreidbaar zonder bestaande code te wijzigen ## Risico Laag. Playwright smoke tests voor set 72 ("Welk gewest is dit?") en set 71 zijn de regressiecheck. _Zie REFACTORING.md voorstel #7_
Ghost commented 2026-04-12 20:56:16 +02:00 (Migrated from codeberg.org)

Meegenomen in #67: QUESTION_TEXT-mapping geïmplementeerd in renderQuestion().

Meegenomen in #67: QUESTION_TEXT-mapping geïmplementeerd in renderQuestion().
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/topoquiz#70
No description provided.