Per esempio, non c'è API remoto con le seguenti chiamate:design/architettura domanda: rollback con i servizi remoti
getGroupCapacity(group)
setGroupCapacity(group, quantity)
getNumberOfItemsInGroup(group)
addItemToGroup(group, item)
deleteItemFromGroup(group, item)
Il compito è quello di aggiungere qualche elemento a qualche gruppo. I gruppi hanno capacità. Quindi per prima cosa dovremmo controllare se il gruppo non è pieno. In tal caso, aumentare la capacità, quindi aggiungere l'elemento. Qualcosa di simile (ad esempio API è esposta con sapone):
function add_item($group, $item) {
$soap = new SoapClient(...);
$capacity = $soap->getGroupCapacity($group);
$itemsInGroup = $soap->getNumberOfItemsInGroup($group);
if ($itemsInGroup == $capacity) {
$soap->setGroupCapacity($group, $capacity + 1);
}
$soap->addItemToGroup($group, $item);
}
Ora, cosa succede se addItemToGroup fallito (voce era male)? Abbiamo bisogno di ripristinare la capacità del gruppo.
Ora immagina di dover aggiungere 10 elementi al gruppo e quindi impostare gli elementi aggiunti con alcune proprietà e tutto ciò in un'unica transazione. Ciò significa che se fallisce da qualche parte nel mezzo è necessario eseguire il rollback di tutto allo stato precedente.
E 'possibile senza mazzo di codici IF e spaghetti? Qualunque libreria, struttura, modello o decisione di architettura che semplificherà tali operazioni (in PHP)?
UPD: SOAP è solo un esempio. La soluzione dovrebbe adattarsi a qualsiasi servizio, anche il TCP non elaborato. Il punto principale della domanda è come organizzare il comportamento delle transazioni con l'API non transazionale sottostante.
UPD2: Immagino che questo problema sia praticamente uguale in tutti i linguaggi di programmazione. Quindi tutte le risposte sono benvenute, non solo PHP.
Grazie in anticipo!
Siamo spiacenti, non capisco come questo aiuterà. Dove devo prendere quelle eccezioni e inserire il codice di rollback? Esempio, forse? :-) Grazie – Qwerty