Il posto in cui lavoro sta cercando di stabilire alcune regole di base, e il dibattito che stiamo avendo ora è quello delle librerie locali e dei servizi web per il riutilizzo del codice. I servizi Web sembrano essere la scelta più popolare nella maggior parte delle aziende, e questo è ciò a cui la maggior parte degli sviluppatori si sta impegnando.
Non riesco a vedere come puoi utilizzare in modo efficace i servizi Web per qualsiasi lavoro serio. Come posso eseguire in sicurezza più chiamate di assistenza se non riesco a utilizzare una transazione?
Diciamo che ho un cron job che attira i clienti dal nostro database che soddisfano una determinata condizione di cui devono essere informati. Vengono inviati un fax, un'e-mail e viene creato un ticket per tenere traccia del problema internamente. Sono 3 chiamate di servizio diverse che accadono per ogni cliente in un ciclo for.
Se si verifica un errore ovunque, è possibile che, ad esempio, un fax e una e-mail vengano inviati al cliente, ma non viene creato un ticket. O peggio ancora, questo lavoro cron potrebbe contenere un bug che lo fa fallire allo stesso punto ogni volta, e invia ripetutamente email allo stesso cliente. Se le librerie fossero tutte locali, tutto potrebbe essere semplicemente racchiuso in una transazione, e nulla di tutto ciò accadrebbe. Ma stiamo usando i servizi web in questo esempio.
Si noti che i metodi e-mail e fax in realtà inseriscono i dati nelle tabelle delle code supportate dal database, che a loro volta sono gestiti da un processo cron separato. Pertanto, le chiamate ai metodi di servizio "invia email" e "invia fax" potrebbero essere annullate senza effetti collaterali se necessario.
Un'opzione consiste nel mettere tutta questa porzione di codice nel servizio web stesso, così il servizio web stesso chiamerebbe i metodi di creazione di email, fax e ticket in una transazione. Ma poi stiamo creando un metodo di servizio web solo per l'uso di una transazione; non c'è una ragione valida per cui avremmo mai bisogno di chiamare questo metodo da nessuna parte eccetto questo script di cron.
Come gestiresti in generale questo metodo?