Se la lista è piccola e cambiata di frequente, potrebbe essere il migliore per consentire all'abbonato di consultare l'elenco completo di volta in volta. Tuttavia, se l'elenco è enorme e le modifiche si verificano raramente, è possibile registrare qualsiasi modifica all'elenco come una sequenza di comandi INSERT / UPDATE / DELETE sul server in una sorta di tabella commands
. Ogni comando richiede un numero di sequenza, in ordine crescente, e l'abbonato dovrebbe ricordare quali comandi sono stati già elaborati nella cache locale. Quindi, quando un utente riceve una notifica che l'elenco "LID" è cambiato, invia una query come
SELECT * FROM commands
WHERE listid= :LID AND sequenceNumber>:lastSequenceNumber
ORDER BY sequenceNumber
al server e recupera solo i comandi di modifica dalla precedente query di quel tipo. Quindi elabora i comandi nella cache locale dell'elenco e aumenta "lastSequenceNumber" di conseguenza.
Si noti che questo funzionerà anche quando un utente perde una notifica o non riceve alcuna notifica. Gli abbonati possono semplicemente eseguire il comando di interrogazione ed elaborazione a intervalli di tempo regolari, questo funzionerà comunque. Le notifiche servono solo a mantenere bassa la latenza e il numero richiesto di roundtrip.
Se segui questo percorso, avrai anche bisogno di una strategia per iniziare nuovi abbonati a un elenco esistente, con una cache locale vuota. In questo caso, l'intera lista dovrebbe essere trasferita al sottoscrittore una volta, insieme all'ultimo numero di sequenza del comando finale che era già stato applicato all'elenco.
Se cerchi google per "Command pattern" o "CQRS" o "event sourcing", troverai ulteriori informazioni su queste strategie.