Strategie per ridurre al minimo la duplicazione nei processi interattivi client-server

3

Ho un sistema client-server che modella un processo aziendale interattivo con i seguenti quattro vincoli: -

  • Il client potrebbe avere dati obsoleti e / o il client potrebbe non essere affidabile. Tutti i comandi lato client devono essere convalidati sul server prima che i loro effetti diventino "verità" .

  • L'esperienza utente del client (anche se normalmente non è il processo stesso) è sensibile alla latenza, la connessione tra client e server non è affidabile e gli utenti devono essere in grado di continuare il proprio flusso di lavoro fuori dalla portata della rete. Il client deve (in una certa misura) essere in grado di aggiornare la propria vista dello stato senza effettuare un round trip sul server ad ogni comando - sebbene il server possa eventualmente rifiutare quei comandi una volta che la comunicazione è stata re -established.

  • L'hardware client e server non condivide una piattaforma. La mia capacità di condividere un'implementazione tra client e server è severamente limitata .

  • Il processo è complicato, multi-step e interattivo - lontano al di fuori del campo di applicazione ad es. framework di convalida basati su annotazioni .

La mia intenzione attuale è quella di costruire un sistema che assomigli alla previsione lato client utilizzata ad es. giochi per computer. Ciò richiede la creazione di una "copia" di una parte sufficientemente completa dello stato del sistema sul client, con il client che valuta i comandi contro questa copia cache dello stato e quindi sincronizza tali comandi con il server come e quando la connessione è disponibile .

Per raggiungere questo obiettivo, è necessario essenzialmente creare l'intero sistema: stato, comandi, regole ed eventi, due volte . Una volta sulla piattaforma del server e una volta sulla piattaforma client.

Mi sono imbattuto in requisiti simili in precedenza, ma mai con tutti e quattro questi vincoli. Sono sempre stato in grado di: a) accettare che il cliente potrebbe essere inaffidabile, b) accettare che il client debba effettuare il check-in con il server su ogni azione, c) utilizzare la stessa implementazione del processo sia sul client che sul server ( es. binari condivisi, o nodo), o d) costringere il modello in qualcosa di abbastanza semplice da usare un framework di convalida.

Sto studiando il transpiling, e anche in qualche modo invocando un ambiente di scripting compatibile dal server. Mentre quelle indagini sono in corso, le mie conclusioni iniziali sono che farlo sarà più più difficile che mantenere due "copie" del processo.

Prima di intraprendere questa follia: ci sono delle altre strategie per i processi interattivi client-server che minimizzano il requisito per l'implementazione duplicata?

    
posta Iain Galloway 04.09.2017 - 16:18
fonte

1 risposta

1

In base alla tua risposta ai miei commenti, ecco la mia risposta:

  • Frammenta il tuo processo aziendale in diversi piccoli pezzi
  • Usa qualcosa come Xml o Json, o qualsiasi altro formato, per descrivere ciascuno di questi piccoli pezzi; puoi archiviarlo in DB e può cambiare nel tempo;
  • Il codice client e server sarà in realtà un parser di questi dati;
  • (facoltativo) Dato che hai già pezzi specifici già definiti per il tuo processo, potresti effettivamente utilizzare l'approccio transpile per "generare" parser in lingue diverse (ad esempio: domani devi implementare un client iOS, quindi devi generare traspone un codice parser Objective-C, per i 'pezzi piccoli' del tuo processo)

Suggerisco questo approccio perché dovevo fare qualcosa di simile, e il processo stesso veniva cambiato di frequente, aggiungendo o rimuovendo i passaggi. Questo approccio ha aiutato molto lo sviluppo.

    
risposta data 13.09.2017 - 14:18
fonte

Leggi altre domande sui tag