Sto integrando un'applicazione aziendale con uno schema esistente.
Il problema principale è come sincronizzare i dati tra il mio sistema e un sistema esterno tramite RPC (le chiamate all'API HTTP sono precise).
Cosa ho fatto finora
La prima cosa che ho fatto è dividere l'interfaccia nei metodi di business in modo tale che all'inizio del metodo avessi una chiara idea dei dati su cui vorrei lavorare. Ad esempio, la chiamata al metodo fittizio getIceCreamsOfColor("red")
probabilmente effettuerà una chiamata remota per ottenere tutti i gelati rossi.
getIceCreamsOfColor($color) {
$remoteClient->queryForColor($color)
...
}
Questo è generalmente molto meglio di
getIceCreams($idArray) {
foreach ($idArray as $iceCreamId) {
$remoteClient->queryForId($iceCreamId)
...
}
}
(a) All'interno di ogni metodo di business a un certo punto dovrei passare 1 secondo circa per scaricare i dati remoti e creare stub locali degli oggetti remoti.
(b) Quindi eseguo la mia logica. Questo significa forse manipolare gli stub locali . Gli stub locali sono in realtà entità aziendali che vengono utilizzati per ragionare sul dominio aziendale e vengono interrogati dal front-end per visualizzare i dati.
(c) Infine dovrei dedicare un altro secondo o più a svuotare il pool di stub locale. Ciò implica la scrittura degli stub sul disco per la memorizzazione nella cache e la scrittura sul server remoto di tutti i dati modificati.
Sia l'azione (a) o (c) sono opzionali se per qualche ragione so che i dati locali sono ancora sincronizzati o non mi interessa molto e voglio solo visualizzare i dati remoti senza modificarli.
A questo punto, controllando il risultato della chiamata remota, il metodo commerciale dovrebbe restituire possibili errori o un messaggio ok.
Questa architettura ti sembra ragionevole?
Pensi che la memorizzazione nella cache locale sia pericolosa / non necessaria per la sincronizzazione dei dati remoti?
Come affronti il problema di gestire un servizio esterno che memorizza i tuoi dati e vuoi mantenerli sincronizzati?
Il motivo principale per cui esiste una sola chiamata per scrivere dati è che l'API remota ha un limite impostato molto basso.