La mia domanda è nell'intestazione. Vorrei sapere se esiste una soluzione architettonica che consente di eseguire transazioni nidificate sul modello di business. Lasciatemi spiegare: il flusso standard per il servizio web è
- convalida i dati di input
- richiesta di processo
- risultati persistenti
- scrivi risposta
Tuttavia, ci sono casi in cui non è possibile convalidare i dati prima che la richiesta venga elaborata, ovvero devo convalidare il sistema dopo l'esecuzione della richiesta: consente di chiamare questo caso inverted validation case
. Se il sistema non è più valido, vorrei ripristinare le modifiche nel modello di business allo stato iniziale. Dovrei notare che il sistema dovrebbe avere buone prestazioni. L'elaborazione della richiesta consuma una grande quantità di potenza di calcolo, quindi è impossibile eseguire le modifiche due volte, una volta per la convalida e una volta per l'elaborazione della richiesta effettiva. Al momento sto utilizzando la memorizzazione temporanea per i risultati dell'elaborazione delle richieste, quindi eseguo la convalida se passa - applico i dati dall'archiviazione temporanea al modello aziendale. Tuttavia, questa soluzione funziona alla grande se ho una transazione, ovvero devo eseguire inverted validation
una sola volta, ma c'è un'altra inverted validation
, che diventa codice spaghetti.
Ecco un esempio: Diciamo che abbiamo un servizio logistico che ottiene come lista di input di carichi con quantità e uscite - elenco di magazzini per ogni carico in cui è possibile conservare il carico. Ogni magazzino può immagazzinare solo una parte del carico, un altro magazzino immagazzinerà il resto. Ad esempio magazzino A magazzino 10% del carico, magazzino B negozio 50% e magazzino C 40% del carico. Per calcolare l'elenco dei magazzini, il server deve eseguire calcoli pesanti. La richiesta deve essere respinta se il carico non può essere immagazzinato in meno di 10 magazzini. Inoltre, è possibile che alcuni fornitori di merci non abbiano abbastanza fondi, quindi questo fornitore dovrebbe essere rifiutato. NOTA il sistema dovrebbe considerare che la capacità del magazzino può essere modificata da carichi già elaborati dalla richiesta corrente. Quindi qui abbiamo due transazioni: una grande transazione per l'intera richiesta e due annidate per il caso in cui non ci sono magazzini e quando non ci sono fondi, come puoi vedere non è possibile applicare subito le modifiche al modello di business. NOTA : il problema nell'esempio è un problema con il giocattolo: l'ho creato solo per mostrare il problema reale.