Miglior pattern per la classe manager che gestisce la sincronizzazione di oggetti tra client e server

2

Sto scrivendo un client che supporta la 'modalità offline'. Quando i record offline possono essere archiviati localmente.

Quando andiamo online, vogliamo essere in grado di sincronizzare questi record con l'API remota.

Voglio essere in grado di tenere traccia di alcuni stati come il progresso della sincronizzazione, se stiamo sincronizzando o meno e altre cose del genere.

Sto pensando di creare una classe manager singleton in grado di archiviare questo stato, ma mi sembra che ci sia un modo migliore per farlo. Voglio stare lontano dai singletons il più possibile a causa della loro natura globale.

    
posta nazbot 31.07.2015 - 01:04
fonte

1 risposta

1

Singletons esistono nella programmazione. Un sacco. Le persone non ci pensano spesso, eppure sono lì. Sebbene esista un merito nell'evitare valori "globali", è dannoso evitare i progetti globali quando sono garantiti.

Con un design a singleton, è possibile assicurarsi che più scritture sullo stesso record non comprimano i dati, che leggono e scrivono in coda non lasciarlo in uno stato imprevedibile a causa di aggiornamenti non atomici, quindi puoi rispondere a domande come "quanti dischi sono rimasti?" in modo facile e prevedibile.

È vero, ci sono altre soluzioni a tutti questi problemi. Ad esempio, è possibile creare pool che contengono record da sincronizzare e inserire blocchi atomici su tali metodi e così via. Avrai comunque bisogno di un posto in cui tenere traccia di questi pool per rispondere a domande come sopra, quindi in questo caso c'è poco vantaggio.

Se hai avuto un sacco di traffico sul client, potrebbe avere senso seguire un progetto parallelo / concorrente. Dubito che sia così, ma ci sono validi motivi per spargere il carico, forse per poter sincronizzare con più thread o per servire molti record contemporaneamente.

Internamente, il singleton potrebbe utilizzare thread o altre tecniche, ma le chiamate esterne al manager non dovrebbero interessarsi ai dettagli di implementazione, quindi un singleton disaccoppierà anche le altre classi dal processo di sincronizzazione.

    
risposta data 31.07.2015 - 07:16
fonte

Leggi altre domande sui tag