Sto per iniziare la prototipazione di un'applicazione web simile a un quiz che mette alla prova le metodologie di valutazione dei test e ho un'interessante domanda architettonica.
Ogni quiz dato a un utente deve utilizzare una metodologia impostata per assegnarlo un punteggio (ad esempio calcolo delle formule, punteggio numerico destro, marcatura negativa, ecc.). Un quiz consiste in una serie di domande, poste una per una, il cui punteggio viene calcolato dopo ogni risposta alla domanda. Il punteggio del quiz dell'utente, tra le altre cose, viene utilizzato per selezionare la successiva domanda di difficoltà appropriata per il progresso dell'utente, da un pool di domande teoricamente infinite.
Al di là delle metodologie di punteggio utilizzate per calcolare il punteggio, l'aspetto "domanda successiva" del programma sarà piuttosto complesso; è strettamente accoppiato con la struttura dei dati (ad esempio, un utente dovrà rispondere a una medium
-difficoltà domanda da X
argomento ... e più criteri).
Vorrei separare la logica delle metodologie di scoring e l'aspetto "domanda successiva" dell'applicazione per mantenere semplice l'applicazione web. La libreria potrebbe accettare un insieme di input (ad esempio l'insieme di domande a cui l'utente ha risposto) e la metodologia da utilizzare per calcolare il punteggio corrente e selezionare la domanda successiva. Se apporto modifiche al codice della libreria che influisce sul calcolo del punteggio, il database presenta dati non corretti. Potrei ricalcolare tutti i punteggi dopo aver influito su tale cambiamento, ma ciò potrebbe causare confusione agli utenti che hanno già ottenuto i loro punteggi finali (questa è solo una speculazione, non so come sarà "aperto" un progetto).
Il problema è che la logica è, per quanto ho mappato finora, strettamente accoppiato alla struttura dei dati (ad esempio una domanda ha un elenco di argomenti, che potrebbero essere utilizzati per scegliere la domanda successiva) . Non solo, ma i risultati forniti dalla libreria devono essere memorizzati dal database per i test in corso e completati.
Vorrei anche rendere la logica dell'applicazione open source per scopi accademici, quindi separarla in una dipendenza renderebbe questo un po 'più semplice (non voglio necessariamente aprire l'applicazione web sorgente).
Come posso disaccoppiare questi dati dalla logica dei componenti in modo che io possa separarli come dipendenza?
Se necessario, posso eseguire una whiteboard sulla struttura e sugli obiettivi generali dell'applicazione e aggiornare la mia domanda per rendere più chiara la descrizione del mio problema.