TRANSACTION EM 3 CAMADAS

MAXCIM 07/10/2017 12:30:53
#477045
olá amigos, tudo bem?

seguindo na saga sombria do POO.

estou migrando um projeto para POO 3 camadas,

estou tentando não misturar as camadas.

porem como trabalhar com Transaction ?



tenho que gerar o ID ( o iD é composto, não da pra ser automático)
tenho que gravar em varias tabelas , algumas não estão na classe.

se algo der errado, preciso abortar tudo.

desde ja agradeço
DS2T 07/10/2017 13:51:45
#477046
Quando eu preciso realizar esse tipo de operação, onde envolvem várias outras micro-operações com outras entidades, eu faço isso na camada BLL.
Claro, que na sua camada de dados, seus os métodos precisarão ter sobrecargas para aceitar objetos de transações também.

Caso esteja usando alguma ferramenta ORM, como o Entity Framework... Você pode passar o contexto como parâmetro, e no final do BLL dá um SaveChanges.

Talvez algum colega que tenha mais afinidade com Design Patterns possa te orientar melhor, mas atualmente, tenho feito dessa forma.

Abraços!
JABA 07/10/2017 23:40:49
#477052
De acordo com o livro Domain-Driven Design do Eric Evans, isso deve ser feito na Camada de Aplicação.
MAXCIM 09/10/2017 13:31:34
#477064
não estou usando ORM , EF...

acho estranho que tenho que levar driver, conexão e outros dados para camada de aplicação

na BLL tbm não teria o driver de conexão e nem acesso mysqlcommand.transaction
KERPLUNK 09/10/2017 14:01:40
#477065
Resposta escolhida
O que você poderia fazer é usar o padrão factory. Sua conexão seria uma classe, que você instancia e ela vai agir muito parecido com o contexto de dados do EF. Então ficaria:

using (MinhaFactory cn = new MinhaFactory())
{
cn.IniciaTransacao();
///faça todas as operações que quer que estejam dentro da transação

if (nenhumErro)
cn.Commit();
else
cn.Rollback();
}
Tópico encerrado , respostas não são mais permitidas