In un'applicazione web con un componente ajax significativo, dov'è il posto migliore in cui la responsabilità della concorrenza da parte del client risiede?
Stiamo provando a utilizzare MVC sia sull'applicazione server (stack LAMP) che sull'applicazione client (ajax, principalmente jQuery e js discreto).
Sul lato server, il nostro modello genera un'eccezione se trova un conflitto di concorrenza che non può risolvere da solo. In sostanza, il modello tiene traccia di un numero di revisione e di una data / utente di creazione e aggiornamento. Se l'oggetto che si sta salvando non è aggiornato (revisione più vecchia rispetto all'archivio dati), tenta un'unione. Se fallisce, il controller gestisce l'eccezione e avvia una sorta di flusso di lavoro di risoluzione.
Il problema riguarda l'applicazione client; poiché ajax esegue le richieste in modo asincrono, il modello non ha necessariamente la versione più recente dei dati, ma solo il controllore lo saprebbe: è responsabile della gestione della coda / polling. L'idea originale era di passare tutti gli aggiornamenti recuperati dal server direttamente ai modelli javascript per gestire la concorrenza - il problema è che la mancanza di eccezioni in javascript ci limita a prendere decisioni sul controllo del flusso nel modello in questo modo.
È una cattiva idea spostare la risoluzione del conflitto di fusione / modello nel controller javascript? C'è un modo migliore per gestire questo senza che il controller arrivi troppo lontano nel modello di terreno?
Flusso della pagina:
- L'utente carica la pagina (applicazione ajax) con i modelli iniziali - i modelli sono numerosi e hanno molti attributi.
- La pagina esegue il polling del server per gli aggiornamenti ogni 10-15 secondi, ovvero per il salvataggio automatico e gli aggiornamenti da altri utenti.
- Modifiche degli utenti.
- Eventuali conflitti che insorgono dopo l'immissione iniziale vengono risolti quando l'utente fa clic sul pulsante "Salva" nella parte inferiore della pagina.