Serializzare un oggetto in modi diversi

7

È normale per me, quando faccio lo sviluppo web, copiare gli attributi dalle mie classi modello all'altra classe che verrà inviata al client. Di solito, con una classe che accetta un modello ed estrae le informazioni necessarie, questo è sufficiente (suppongo un adattatore, suppongo), ma a volte non è così facile.

In alcuni sistemi, per motivi diversi, ho bisogno di inviare una serie di attributi diversi, ed è qui che la semplicità sembra scomparire.

Con il mio approccio abituale finisco con un sacco di classi molto simili tra loro, solo perché uno è per essere usato in un canale che richiede alcune informazioni e gli altri per i canali che richiedono informazioni molto simili. Ma non può essere la stessa somma dei due perché prestazioni o sicurezza. (Quando dico canali è perché potrebbe essere serializzato usando json o xml, o usato in altri protocolli, o semplicemente visualizzato come html dal server.)

La domanda è: Esiste uno schema che consente trasformazioni diverse di un oggetto (che potrebbe aggregare altri oggetti) a seconda del contesto utilizzato? (senza troppa duplicazione del codice)

Caso di studio: in un gioco di carte distribuito (come il poker), ho bisogno di inviare ad ogni utente il punteggio, il nome dei giocatori, le carte che sono state giocate e le carte che ha ha in mano. Ma quando termina il gioco devo anche spedire le carte nelle mani degli altri giocatori. E in un'altra vista del gioco ho bisogno di inviare solo il punteggio e il nome dei giocatori.

Mi dispiace per il mio inglese, non è la mia prima lingua (e l'idea che sto cercando di comunicare sembra un po 'complessa per me).

    
posta Fernando 14.07.2013 - 02:19
fonte

3 risposte

4

Quello che stai facendo in questo momento è il Pattern di trasferimento dei dati.

Potresti dare un'occhiata a 'composition' (Robert Martin). Non è davvero un modello ma piuttosto una linea guida.

    
risposta data 14.07.2013 - 08:51
fonte
0

Ciò potrebbe essere risolvibile con l'uso di diversi modelli di design. Ciò porterà ad un approccio generico, ma potrebbe non essere così efficace e facile da capire.

Per la serializzazione puoi usare Memento . Se vuoi serializzare in base a qualche stato, puoi utilizzare Stato o strategia .

La deserializzazione dovrebbe funzionare allo stesso modo.

Forse è anche sufficiente inviare un enum (int) che determina lo stato dell'oggetto.

    
risposta data 14.07.2013 - 07:56
fonte
0

Progetta un sistema di classe. Ogni classe ha un metodo

char *toString(struct Obj *self);

È possibile utilizzare sprintf solo per serializzare i dati su un buffer di stringa.

Mi piace usare il formato JSON per serializzare, perché questo formato è facile da leggere, analizzare e combinare.

    
risposta data 13.08.2013 - 11:47
fonte

Leggi altre domande sui tag