classe di messaggistica e stato globale

3

Questo è un progetto di front-end che utilizza socket.io per tutte le comunicazioni con il server. Ciò consente una spinta che è buona, ma recentemente ci è stato chiesto di fornire un pulsante di pausa. Il pulsante di pausa è inteso all'arresto dei dati dalla modifica sull'interfaccia utente se l'utente non desidera che lo faccia automaticamente.

Al momento abbiamo una classe che avvolge il web-socket e fornisce un wrapping molto minimale di socket.io.

Il problema è che non possiamo semplicemente spegnere il socket. Le interazioni degli utenti devono continuare a funzionare e le diverse visualizzazioni hanno specifiche diverse su quali messaggi devono essere ignorati.

In fin dei conti è un grande booleano globale, non importa come lo si taglia, e questo fa schifo. Preferirei che non fosse davvero una variabile globale, quindi ecco l'idea che ho avuto finora:

Narsty Global

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  socket.on('myPausable', function(data){
      if(window.isPaused){ return false; }
      // do thing
  });

Valore passato

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  socket.on('myPausable', function(data, isPaused){
      if(isPaused){ return false; }
      // do thing
  });

Metodo avvolto

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  socket.onLive('myPausable', function(data){
      // do thing
  });

Classe separata

  // A non pausable listener
  socket.on('myEvent', function(data){
      // do thing
  });

  // A pausable listener
  liveData.on('myPausable', function(data){
      // do thing
  });

Attualmente c'è un sacco di messaggi che avvengono sul socket, e ci sarà solo un interruttore "PAUSE" nell'interfaccia utente, quindi questo deve essere fatto con attenzione. Consigli e buone pratiche sono apprezzati. Grazie gente.

    
posta Fresheyeball 06.03.2014 - 20:55
fonte

2 risposte

3

Ho qualche dissonanza cognitiva riguardo al pulsante di pausa: come utente, considero 'Pausa' per significare - fermare ciò che il server sta facendo. Dal tuo requisito, tuttavia, sembra che il pulsante non sia influenzato dal pulsante, il che potrebbe essere fonte di confusione e persino fuorviante, poiché il feedback all'utente si interrompe davvero. Credo che nella maggior parte dei casi, un pulsante chiamato "Interrompi animazione" o un commutatore chiamato "Aggiornamento automatico" possa trasmettere meglio l'idea all'utente.

Per quanto riguarda la questione, potrei suggerire un'altra idea, che sta avendo un flag sul server , che impedirà ai messaggi pertinenti di raggiungere del tutto il cliente quando è in pausa. In questo modo, l'unica modifica nel client è l'aggiunta del messaggio del server per mettere in pausa o annullare la pausa e il resto rimane lo stesso.

Se ciò non ha senso nel tuo caso, credo che la soluzione più semplice (anche se ritenuta brutta) sarà la migliore, poiché ha il minor numero di parti mobili. Utilizza una variabile di stato globale (con uno spazio dei nomi adatto, ovviamente, window.MyAmazingApp.isPaused ), e usala se necessario, lasciando intatto l'altro codice.

    
risposta data 12.03.2014 - 19:51
fonte
0

Suppongo che sia necessario aggiornare l'interfaccia utente con le informazioni più recenti quando si annulla la sospensione dell'aggiornamento.

Questo significa che vuoi fare una pausa sull'interfaccia utente e non sul socket. Lascia che il socket funzioni liberamente, aggiornando lo stato locale. Per l'interfaccia utente, si utilizza una copia dello stato locale per la visualizzazione e non si aggiorna la copia finché non si riattiva tutto.

    
risposta data 12.03.2014 - 19:48
fonte

Leggi altre domande sui tag