Esiste una relazione tra un'origine dati (JSON) e il Modello che la consuma?

0

Ho messo insieme una grande struttura di dati del quiz. È in formato JSON ma immagino possa essere XML ecc. Potrebbe sembrare qualcosa di simile a questo:

{
   "quiz":{

       "title": "Welcome to Quiz"
       "entries": [

            {

                "question": "programmers.so is awesome?"
                "answers": [
                     {
                         "answer": "Yes"   
                     },
                     {
                         "answer": "Yes!"   
                     }
                ]
            }
       ]
    }
}

Ora ho bisogno di creare un'applicazione che possa consumare questi dati. Inizierò caricandolo e inserendolo in Modelli.

Ma ... I dati qui non rappresentano tutti i dati di cui ho bisogno. Ad esempio, quando selezioni una risposta, desidero tenere traccia di quale risposta è stata selezionata.

Questa informazione non appartiene ai dati.

Voglio basare la struttura del mio modello sulla struttura JSON o la tengo separata?

Has dei dati

class Model {

    protected data: IQuizJSON;

    constructor(data: IQuizJSON){

          this.data = data;

          //use the data to construct unpolluted models 

    }

}

Is dei dati

class Model {

    title: string;
    entries: Entry[];

    constructor(data: IQuizJSON){

          this.title = data.title;
          this.entries = [];
          for (var i: number = 0; i < data.entries.length; i++){
               this.entries.push(new Entry(data.entries[i]));
          }

    }

}
class Entry implements IQuizEntry {

     question: string;

     constructor(data: IQuizEntryJSON){

          this.question = new Question(data.question); //etc

     }

}

Fino ad ora ho letto come interagiscono i Modelli e le Viste, ma qui i dati e il modello sembrano fondersi e non sono sicuro del modo migliore di procedere?

    
posta Clark 25.07.2015 - 12:50
fonte

1 risposta

1

Puoi avere tanti modelli quanti ne occorrono per soddisfare i molti obiettivi che un'applicazione di successo deve affrontare.

Un concetto che potrebbe aiutare in questo caso è il Principio di Responsabilità Unica. Fondamentalmente, si pone la domanda, "cosa causerebbe il cambiamento di questa struttura dati?" Nel tuo caso, cambiare i dettagli della struttura del quiz sarebbe una fonte primaria di cambiamento. Quindi, il tuo modello di dati di base riflette tutto e solo la rappresentazione esterna.

Una seconda parte dell'oggetto business, tuttavia, è la capacità di tenere traccia di quale risposta è stata selezionata, ad esempio. In generale si vorrebbe una seconda struttura dati per conservare le informazioni sulle selezioni. Certamente, vorrai memorizzare queste statistiche separatamente dalle fonti per il tuo quiz. Tra le altre cose, potresti voler memorizzare le correlazioni della selezione di risposte con altre risposte selezionate o quali persone hanno selezionato quale risposta.

Quindi la risposta è che è necessario creare una struttura di dati aggregata che contenga una struttura dati che corrisponda alla rappresentazione del questionario, così come una struttura dati che memorizza le statistiche di interesse.

Inoltre, non vuoi che l'argomento del costruttore sia l'argomento JSON. È molto meglio avere una fabbrica, insieme a un costruttore. Ciò ti consentirebbe di passare a XML, ad esempio, come rappresentazione esterna, e questo non dovrebbe richiedere la modifica del modello base.

    
risposta data 25.07.2015 - 18:32
fonte

Leggi altre domande sui tag