Ho un oggetto Foo
che ha 2 proprietà pubbliche: A
e B
.
Queste proprietà possono essere modificate dall'esterno, poiché l'applicazione su cui sto lavorando utilizza un'architettura di associazione dei dati. Questo è il codice front-end (client), ma comunica anche con un server per recuperare i dati.
Quindi il mio oggetto sta ascoltando le modifiche sia a A
che a B
.
Qualsiasi modifica in A o B sta attivando il metodo update()
, che attiva una richiesta al server.
Ho anche un pezzo di logica nel mio oggetto Foo
che dice ogni volta che cambi B
, devi resettare A
al suo valore iniziale.
Il mio problema è, come faccio a gestire l'aggiornamento di B senza attivare il metodo update()
due volte?
Guardando l'immagine sopra, il percorso verde dovrebbe sempre attivare un aggiornamento. Il percorso rosso termina a volte attivando 2 aggiornamenti, perché cambiando B cambia A (se non è il valore iniziale), che attiva sempre un aggiornamento.
Devo aggiungere che tutto è asincrono quindi gli osservatori per le mie proprietà non mi notificano immediatamente dopo aver cambiato gli oggetti. (Scelta progettuale della piattaforma e della lingua in cui lavoro - Polymer.JS). Quindi questo rende più difficile impostare un flag prima di cambiare B
da A
- Ho provato a farlo ma non ha funzionato, poiché il metodo watcher viene attivato dopo l'esecuzione della catena di modifiche.
Come vengo dal mondo front-end, con un background in graphic design, non ho le conoscenze necessarie per individuare gli errori che potrei fare, ma voglio imparare, quindi mi piacerebbe che tu Indicami come riferimento materiale e / o libri che posso leggere sulle corrette applicazioni del modello di osservatore.
C'è uno schema che si occupa di questo particolare scenario e quali sono le possibili soluzioni a questo?
Se il pattern dell'osservatore non è la scelta giusta per questo, c'è un altro pattern che potrei usare internamente che mi permetta di esporre solo le due proprietà A
e B
al mondo esterno?
Una terza opzione sarebbe che sto applicando il modello giusto, ma la piattaforma non supporta ciò che sto cercando di ottenere. Mi piacerebbe saperlo, così posso pubblicare la domanda su StackOverflow sotto i tag giusti.