Sto pianificando un'app che consente agli utenti di completare sondaggi / moduli. Ho problemi a pianificare lo schema dei dati per i moduli.
Voglio davvero avere una struttura dati che può essere serializzata e deserializzata automaticamente in classi.
Non sono sicuro di dove / come dovrei memorizzare le risposte. Stavo pensando che potrebbero essere una sorta di dizionario o incorporati nelle classi di domande.
Requisiti funzionali
- Le domande possono essere aggiunte / modificate / spostate / rimosse (l'ordine è importante)
- Le risposte esistenti vengono mantenute quando le domande vengono aggiunte sono modificate
- Le domande possono essere raggruppate (e anche sottogruppi)
- I gruppi possono essere gruppi ripeti a cui è possibile rispondere un numero variabile di volte
- Le risposte possono essere PUT sul server come aggiornamento incompleto
- Le risposte possono essere modificate / aggiornate / cancellate
Quindi immagino di aver bisogno di una sorta di struttura dati che mi permetta di fare il seguente
- indirizzo e ottieni un elemento specifico con un identificatore univoco
- conserva l'ordine
- inserisci un nuovo elemento in una posizione particolare
- mantiene un identificatore univoco in modo che le risposte registrate per le versioni precedenti di un modulo possano essere copiate in una versione aggiornata
- identifica in modo univoco più set di risposte per un singolo gruppo ripeti
Esempio
Ecco alcune classi c # che ho creato per giocare con questi concetti ma che non soddisfano tutti i requisiti
public class Form
{
public Guid Id { get; set; }
public string Title { get; set; }
public List<FormElement> Elements { get; set; }
}
public abstract class FormElement
{
public string Name { get; set; }
public string Label { get; set; }
}
public class QuestionElement : FormElement
{
public string Type { get; set; }
public bool ReadOnly { get; set; } = false;
}
public class GroupElement : FormElement
{
public List<FormElement> Elements { get; set; }
}
public class RepeatGroupElement : GroupElement
{
}
Ambiente
- Asp.Net 5 Server (MVC 6) e Entity Framework 7
- app client Java
- Solitamente uso Gson per la serializzazione.
- Sono inoltre disponibile a utilizzare qualsiasi delle classi di raccolta Guava ma non sono sicuro di cosa potrebbero essere gli analoghi in C # essere.