Model-View-Controller e responsabilità della concorrenza lato client

1

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:

  1. L'utente carica la pagina (applicazione ajax) con i modelli iniziali - i modelli sono numerosi e hanno molti attributi.
  2. 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.
  3. Modifiche degli utenti.
  4. Eventuali conflitti che insorgono dopo l'immissione iniziale vengono risolti quando l'utente fa clic sul pulsante "Salva" nella parte inferiore della pagina.
posta Bryan Agee 30.08.2011 - 01:51
fonte

1 risposta

2

Non completamente chiaro su quello che stai facendo. Ma ecco cosa presumo, stai scrivendo un qualche tipo di applicazione con un gran numero di utenti che aggiornano gli stessi valori (come il prezzo di un titolo) e vuoi usare MVC sullo stack client (JS) per creare un'applicazione desktop come feel .

Avere il controllo della concorrenza nel controller sembra giusto. Se fossi in me, scriverei il controller come un gruppo di classi (funzioni) con ampio supporto per la richiamata. Se c'è stato successo, chiama questo, se non è riuscito chiama questo.

Quindi nella vista, chiamate le funzioni del controller con le funzioni di richiamata destra.

Anche se funzionerà, sento che l'architettura è troppo complicata. Conserva il server solo come modello di comunicazione (acquisisci il blocco sulla modifica, aggiorna il salvataggio, rilascia il blocco in caso di successo) oppure sposta tutto sul server e usa JQuery ajax per fare tutto il lavoro.

    
risposta data 30.08.2011 - 03:27
fonte

Leggi altre domande sui tag