Come sincronizzare gli oggetti del modello client e server?

4

Abbiamo un'applicazione client-server con un thick client (GWT).

Esistono presentatori MVP lato client (controller MVC) che contengono riferimenti ad alcuni oggetti visualizzati nella GUI. Alcune azioni dell'utente provocano l'aggiornamento di questi oggetti sul server. Successivamente possiamo inviare gli oggetti aggiornati al client e riassegnarli al presentatore.

Il problema è che di solito ci sono alcuni riferimenti a un oggetto sul client (elenchi, HashMaps, ecc.) ed è difficile aggiornarli tutti.

Un altro approccio non è aggiornare i riferimenti ma aggiornare l'oggetto stesso, ad es. copia tutte le proprietà dall'oggetto server a quella client. Ma se un oggetto è complesso non è neanche facile.

Quale approccio è migliore? O forse mi manca qualcosa?

    
posta Andrey 26.02.2013 - 11:01
fonte

2 risposte

1

Questo problema è quasi identico a quello di sincronizzazione tra il suo codice e il database.

Di solito, il codice di back-end fa lo stesso flusso di lavoro:

  1. Richiedi database
  2. Crea (idrata) oggetto da dati grezzi
  3. Manipola i dati
  4. Se necessario, aggiorna il database.
  5. Alla successiva richiesta (nel caso di un'app Web), invalidi totalmente gli oggetti idratati che hai, e ricominci dal punto 1. di nuovo, quando riconosci il database come sorgente "a monte" dei dati.

Da lì, direi che hai 2 paradigmi:

Client - server come server - database

La sincronizzazione da client a server è praticamente la stessa, è necessario impostare un ciclo, in cui si consideri che i dati sono ancora "freschi", quindi alla successiva "azione" dell'utente, eseguire nuovamente la query sul server (come farebbe con un database), e creare i tuoi oggetti client da lì.

Invio da server a client

Un'altra soluzione è di fare in modo che il server "spinga" i nuovi stati oggetto al client, non appena sapranno di essere stati aggiornati. Tale paradigma è utilizzato da nuovi framework come Meteor : i server ascoltano il database, che emette un evento su ogni aggiornamento / inserimento / ecc. I server aggiornano quindi i loro oggetti interni e trasmettono l'evento ai client, che fanno lo stesso (sto semplificando per il gusto della risposta) .

Conclusione

In ogni caso, non esiste una soluzione universale che è necessario aggiungere come libreria al progetto. Il caching è difficile, come se fosse davvero difficile, e dovrai integrare il server - i vincoli del client con il tuo codice e gestirlo da solo.

    
risposta data 26.02.2013 - 11:36
fonte
0

Non penso che dovresti aggiornare l'intero oggetto perché ciò significherebbe spostare "dati aziendali" attraverso l'interweb. Se questo è compromesso, l'intero sistema può essere azzoppato in pochi secondi. Questo, ovviamente, è se stai creando qualcosa su larga scala.

Per quanto riguarda la velocità, l'opzione di riferimento è anche favorevole poiché vi sono meno informazioni che fluiscono attraverso le interconnessioni.

    
risposta data 29.03.2013 - 23:45
fonte

Leggi altre domande sui tag