6. Technisch ontwerp
Dit hoofdstuk beschrijft de module-specifieke technische invulling. De centrale technische regels voor module-integratie, projectgrenzen, payloadopslag, frontendopbouw en tests blijven vastgelegd in het Technisch Ontwerp.
6.1 Centrale technische koppelingen
| Onderwerp | Centrale bron |
|---|---|
| Oefencatalogus, niveaus, categorieën en modules | Technisch Ontwerp hoofdstuk 08 |
| Oefenmodulecontract en dynamische module-integratie | Technisch Ontwerp hoofdstuk 09 |
| Oefenruns, voortgang en resultaten | Technisch Ontwerp hoofdstuk 10 |
| Frontend, Blazor, routing, state en componentopbouw | Technisch Ontwerp hoofdstuk 24 |
6.2 Modulecontract
| Contractonderdeel | Verwacht gedrag voor deze module |
|---|---|
GetModuleDescriptionComponent() | Levert de beschrijving die docenten helpt begrijpen wat de module doet voordat zij deze kiezen. |
GetModuleConfigureComponent(DefaultModuleConfig moduleConfig) | Levert de configuratiecomponent voor nieuwe oefeningen, inclusief generieke basisvelden die in de moduleflow zichtbaar zijn en modulespecifieke configuratievelden. |
GetModuleEditConfigureComponent(ModuleEditConfigureContext context) | Levert dezelfde configuratie in bewerkcontext, gevuld vanuit de opgeslagen modulepayload van een bestaande oefening. |
GenerateModuleExercises(GenerateModuleExercisesContext context) | Genereert een set vragen die voldoet aan operation mode, getalconfiguraties, uitkomstgrenzen, balansregels, vraagcount en generatiebeperkingen. |
ShowModuleQuestionComponent(ShowModuleQuestionContext context) | Renderet de huidige vraag, inputstate, feedbackstate en optionele Geen idee-actie op basis van de vraagstate en runtimeopties. |
De module moet deterministisch genoeg zijn om een opgeslagen run opnieuw te kunnen tonen vanuit de opgeslagen vraagstate. De module mag na het genereren van een run niet afhankelijk zijn van een opnieuw uitgevoerde randomgeneratie om bestaande vragen te reconstrueren.
6.3 Module-identiteit
| Veld | Waarde |
|---|---|
| Documentatiedatum | 24-04-2026 |
| Documentatiestatus | Uitgewerkt op basis van HTML-mockups, PNG-screenshots, Functioneel Ontwerp, Technisch Ontwerp, Software Requirements Specification, database-informatie en ondersteunende modulearchitectuur. |
| Modulefamilie | Rekenen |
| Modulefunctie | Eenvoudige optel- en aftreksommen met twee operanden |
| Verwachte administratieve modulebron | ExerciseModules |
| Verwachte technische referentie | OptellenAftrekken_Simple_v1 |
| Verwachte schema-identificatie | schemaVersion = 0.9 |
| Generieke opslagvorm configuratie | Exercises.ModuleConfigurationJsonBase64 |
| Generieke opslagvorm runvragen | ExerciseRuns.QuestionDataJsonBase64 en ExerciseRunProgress.QuestionStateJsonBase64 |
| Module-entrypoints | GetModuleDescriptionComponent, GetModuleConfigureComponent, GetModuleEditConfigureComponent, GenerateModuleExercises, ShowModuleQuestionComponent |
De module wordt niet runtime ontdekt. De module moet administratief beschikbaar zijn via ExerciseModules. De technische implementatie wordt pas aangesproken wanneer de generieke applicatie op basis van ExerciseModules.CodeReference en het strategy pattern de juiste modulecomponent nodig heeft.
Voor deze module geldt dat de betekenis van de configuratievelden modulespecifiek is. OefenHub slaat uniforme platformdata relationeel op, maar slaat de interne configuratie en vraagtoestand van deze module op als JSON/base64-payload. Alleen gegevens die platformbreed querybaar, autorisatiegevoelig, historisch verplicht of domeinbreed herbruikbaar zijn, horen relationeel buiten de modulepayload te staan.