Transaction Design Pattern per MVC e posizione di responsabilità?

3

Sto progettando un'applicazione Spring MVC piuttosto standard, e sto cercando di capire dove dovrebbe essere la responsabilità della gestione delle transazioni.

Ho letto Java Transaction Design Strategies , e quello che ho la soluzione migliore è quella del delegato del server, in cui il controller è ciò che gestisce le transazioni, mentre i servizi e i DAO non sono consapevoli delle transazioni.

In qualche modo, questo non sembra giusto. Il mio istinto è che i servizi sono quelli che dovrebbero controllare le transazioni, ma ho casi in cui un controller può chiamare diversi servizi per eseguire un'azione.

Come hai gestito Transazioni nelle applicazioni MVC prima e dove ritieni che sia il posto migliore per gestire le transazioni?

    
posta John Farrelly 29.05.2012 - 15:20
fonte

3 risposte

4

Trovo utile implementare una facciata di servizio che disaccoppia l'implementazione dei servizi dal contratto di servizio. Il Controller dal livello di presentazione (il tuo materiale MVC) dovrebbe essere in grado di effettuare una singola chiamata a una facciata di servizio, che quindi orchestra le chiamate verso uno o più oggetti / metodi "di servizio" e restituisce qualsiasi cosa il contratto di servizio dice che ha bisogno di tornare.

In questa architettura, la facciata di servizio sarebbe anche il punto in cui agganciare la gestione delle transazioni.

    
risposta data 29.05.2012 - 18:00
fonte
3

Sono a conoscenza del fatto che il responsabile del trattamento dovrebbe essere principalmente responsabile della comunicazione con il livello aziendale e della preparazione dei dati di visualizzazione quando necessario. In tal caso, non dovrebbe avere alcuna conoscenza sulle transazioni; dovrebbero essere conservati in uno strato inferiore.

Quando il controller deve eseguire una logica che consiste in più passaggi in cui si desidera una singola transazione, tale logica deve essere implementata in un metodo nel livello aziendale. Quando gestisci le transazioni con Spring , puoi facilmente definire un metodo di servizio come transazionale e in che modo le chiamate nidificate devono gestire le loro transazioni: se raccogliere la transazione esistente se disponibile, creare sempre nuove, ecc.

    
risposta data 29.05.2012 - 17:12
fonte
1

Il livello di servizio è il posto più adatto per la demarcazione delle transazioni nelle app MVC, indipendentemente dal pattern del livello di servizio che si utilizza.

Tuttavia, a volte le concessioni dovrebbero essere fatte per un'applicazione specifica quando ha senso, quindi non ne sarei eccessivamente dogmatico. Assicurati solo di utilizzare la gestione dichiarativa delle transazioni in modo da poter spostare le transazioni nella posizione più appropriata senza influire sul codice dell'applicazione.

    
risposta data 29.05.2012 - 18:32
fonte

Leggi altre domande sui tag