Quindi ho questa cosa generica DAO in corso e al valore nominale sembra essere ok. È fondamentalmente modellato dopo l'applicazione di esempio CaveatEmptor dei ragazzi di Hibernate.Pattern DAO: dove rientrano le transazioni?
Oltre a questo ho un livello aziendale ... il coraggio dell'applicazione. È completamente inconsapevole di qualsiasi implementazione DAO specifica.
Tutto a questo punto sembra soddisfacente, finché non comincio a pensare alle transazioni. Se le transazioni sono lasciate al cliente da implementare, allora in che modo nel mondo mantengo la bella separazione che ho avuto tra i miei strati? Cioè, sto usando Hibernate al momento, e non mi sembra molto di aggiungere transazioni specifiche per l'ibernazione al mio codice del livello aziendale.
ho potuto creare una semplice interfaccia transazione con iniziare, commit e rollback metodi e passare un'implementazione al mio livello di business ... ma ... non sono sicuro ...
Così qui è la sfida: mi puoi consigliare un modo per farlo senza usare la parola Spring (o EJB, o qualsiasi altro framework aggiuntivo)?
Bene, questo funziona, ma si finisce rapidamente con migliaia di linee di codice duplicate, per qualsiasi app di business realistica. –
@Rogerio, non tutti i metodi in un oggetto business sono necessariamente una transazione. Se si finisce con la duplicazione, allora forse il tuo dominio non è ben espresso, oppure puoi trovare un modo migliore per esprimerlo. –
Ho appena riletto le pagine pertinenti sulle transazioni nel libro PoEAA (71-77), e l'autore non consiglia alcuna cosa sulle transazioni che sono un problema di business (sono * non * parte della lingua aziendale, ma uno strumento per * controllo della concorrenza *). Inoltre, in pratica, quasi tutti i metodi coinvolti in un'operazione commerciale * devono * essere eseguiti nel contesto di una transazione di sistema, anche se in genere non si dispone di una transazione separata per ciascun metodo. Il punto rimane, un'applicazione ben progettata dovrebbe * non * avere un codice di demarcazione delle transazioni esplicito ovunque, ma solo in uno o due punti centrali. –