Struttura dati per modulo o sondaggio [chiuso]

0

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.
posta Jon 09.02.2016 - 18:37
fonte

1 risposta

2

Ci sono due modi per progettare un'API. Puoi progettare gli oggetti e quindi creare il contratto dell'API dagli oggetti, oppure puoi progettare il contratto dell'API e costruire gli oggetti per facilitare questo.

In questo caso, potresti scoprire che andare con il contratto con il primo approccio di progettazione può essere più facile con cui lavorare. Side bit - un'occhiata a swagger come approccio alla descrizione del contratto per gli endpoint REST (sembra un API REST).

Descrivi il JSON che vuoi recuperare per ogni richiesta o inviare con ogni richiesta. E quindi costruisci gli oggetti che verranno serializzati e deseralizzati su ciascuna estremità (il lato, l'editor swagger ha gli strumenti per la generazione del codice).

Vuoi cambiare l'ordine di due elementi in un gruppo? Ok, potrebbe essere un PATCH /formObject/1234 con i dati [ { 'id':234, 'neworder':1, 'oldorder':10 } ] o qualcosa di simile. E documentate che e lavorate per far sì che sia il client che il server aderiscano a quel contratto API.

Anche il primo progetto dell'oggetto funziona. Significa anche che a volte quando realizzi ciò che vuoi l'API per fare in un secondo momento significa tornare al tavolo da disegno per la progettazione dell'oggetto.

    
risposta data 09.02.2016 - 18:56
fonte

Leggi altre domande sui tag