Le funzioni di serializzazione appartengono a un modello o a un controller?

4

Sto sviluppando un'applicazione in cui:

  • I modelli mantengono i dati come una matrice multidimensionale, che viene salvata così com'è in un database MongoDB. Il modello viene utilizzato per fornire metodi per manipolare i dati e, al di fuori di tali metodi, le proprietà dei dati sono di sola lettura.

  • Il factory di modello crea istantaneamente ogni oggetto in un modo standardizzato e consente alle "query" di eseguire una ricerca rapida in una voce del database e creare istantaneamente un oggetto con esso contemporaneamente.

  • La "vista" è Javascript, e tutto ciò che richiede al controllore per certe cose, e il controller risponde su HTTP con JSON.

  • Il controllore usa la factory del modello per creare un'istanza degli oggetti del modello e fare qualsiasi cosa la richiesta richieda, se possibile. Restituisce sempre JSON.

Generando che JSON è attualmente in una classe "helper", che sto cercando di eliminare. La serializzazione dei dati MongoDB implica la conversione di MongoDate, MongoID e altri oggetti Mongo in stringhe. È necessario che nel controller vengano trasmessi al browser come stringhe: per la maggior parte, il controller sa come inviare i dati alla vista. Ma in alcuni casi, è necessario nel modello tabulare dati di array multidimensionali in un elenco prima che il controllore lo dia al browser. Il controller non sa abbastanza sul modello per fare quella tabulazione.

Qui una classe di aiuto è inevitabile? O dovrebbe avvenire il 100% della serializzazione all'interno del modello? Devo lasciare la funzione di serializzazione nel modello astratto e usarla dal controller con una chiamata statica?

    
posta Kavi Siegel 08.07.2014 - 22:45
fonte

1 risposta

1

Penso che la serializzazione su JSON sia una preoccupazione del web (infrastruttura), non necessariamente un problema di modello. Quindi invocare un assistente dal controller per eseguire la serializzazione va bene, lo considererei desiderabile. Gestisce una preoccupazione piuttosto chiara, penso che sia un componente valido.

La tabella che hai citato, tuttavia, suona come se fosse una cosa del modello, eviterei di fare trasformazioni di modello implicite durante la fase di serializzazione. Verificare se il controller può richiedere direttamente questo modello con tabulati o se il modello può fornirlo in modo trasparente se non si desidera che il controller lo sappia. In entrambi i casi, assicurarsi che i dati siano completamente preparati prima di consegnarli al serializzatore. Se la tabulazione è specifica per una vista, potrei fare questa tabulazione in un "modello di vista" che colloco tra le viste e il modello (di dominio).

    
risposta data 22.05.2015 - 15:13
fonte

Leggi altre domande sui tag